【问题标题】:Inherited value of variable is 0变量的继承值为 0
【发布时间】:2019-07-15 16:22:20
【问题描述】:

我是初学者,我正在尝试继承另一个类中变量的值。我得到的值是 0,应该是 10。

头等舱:

public class assignment
{
    int var = 10;

    public static void main(String[]args)
    {
        initialize pere = new initialize();
        System.out.println("  ");
        System.out.println(" pere.invariable: "+pere.invariable);
   }
}

Second Class 从类分配继承 var:

public class initialize
{
    public static int  invariable;

    public static void main(String[]args)
    {
       assignment variable = new assignment();
       System.out.println(" variable.var : " + variable.var);
       invariable = variable.var;
       System.out.println(" invariable: " + invariable);
    }
}

为什么是pere.invariable = 0 而我却继承了= 10 的不变量(第二类)?

【问题讨论】:

  • 请考虑使用代码块使您的示例代码更具可读性。
  • @Andreas 我以为我在那个格式错误的代码转储中发现了“扩展”。
  • 您有两个main 方法,但其中只有一个执行设置invariable 值的代码,而且它不是您正在执行的那个。
  • 您询问的是 pere.invariable,它只存在于方法 mainassignment 版本中。由于 2 个 main 方法完全相互独立,所以 initialize 版本的方法 main 中的任何代码都不会被执行,那么您为什么期望该值不是 0 的默认值?
  • 安德烈亚斯是完全正确的:这里发生了零继承。将一个 int 分配给另一个不会“连接”这两个字段。您只需分配值,!?

标签: java


【解决方案1】:

我认为这里的混乱源于几个地方。

这里没有发生继承。继承是发生在一个类上的事情。例如,

public class A {}

// B extends A
public class B extends A {}

类的“入口点”通常是它的构造函数。 main 不是构造函数,它是 Java 应用程序的入口点(它是 main 函数)。构造函数是一个标有类名的函数。例如:

public class B {
    public B() {
        // I am inside a constructor
    }
}

你的代码现在的位置,initialize main 函数永远不会被调用。您要么需要从 assignment 主函数手动调用它,要么需要将其转换为构造函数(更改它的名称并删除静态修饰符,如我的示例所示)。

这看起来像是一项学校作业。据我所知,StackOverflow 有一项政策,禁止直接回答学校作业的问题,但我希望这个答案至少可以帮助消除一些困惑并帮助您指明正确的方向。

【讨论】:

  • 帮助中心没有提及这样的政策,它可能在过去的某个时候是政策,但现在似乎不是。这是好事还是坏事,都是meta的讨论!
  • 知道了。也就是说,从个人的角度来看,我完全拒绝给人们回答作业问题:)
  • 和我一样 - 我个人认为只是给他们答案是对他们的伤害,因为这剥夺了他们学习的机会
  • 请注意这不是作业,我只是想自学如何编码
猜你喜欢
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2015-12-09
  • 2014-10-06
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多