Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
想知道下面Java程序的输出吗_Java_Subclass_Extends_Superclass_Super - Fatal编程技术网

想知道下面Java程序的输出吗

想知道下面Java程序的输出吗,java,subclass,extends,superclass,super,Java,Subclass,Extends,Superclass,Super,我正在处理一些过去的试卷,在这里我不确定输出。我想我不清楚扩展和超级 public class Superclass{ public boolean aVariable; public void aMethod(){ aVariable = true; } } class Subclass extends Superclass { public boolean aVariable; public void aMethod() {

我正在处理一些过去的试卷,在这里我不确定输出。我想我不清楚扩展和超级

public class Superclass{
    public boolean aVariable;

    public void aMethod(){
        aVariable = true;
    }
}

class Subclass extends Superclass {
    public boolean aVariable;

    public void aMethod() {
      aVariable = false;
      super.aMethod();
      System.out.println(aVariable);
      System.out.println(super.aVariable);
    }
}

我认为第二个输出是正确的,因为它将引用超类,并且它是一个对象。但是,我不确定第一个输出。它是一个值,打印错误,还是一个对象?

我进行了科学实验(复制粘贴并运行),它打印出来 假的 真的

详情如下:

输出将是:

false
true
false
true
因为在
子类中,默认情况下
变量
false
(因此赋值
变量=false;
是不必要的)。阅读更多有关的信息。
Superclass
中,通过使用关键字super
super.aMethod()调用Superclass方法,将
aVariable
初始化为
true
。阅读更多关于


看看。

因为它们都被限定在各自的类块的范围内,所以使用相同的名称并不重要。现在看起来,您将aVariable设置为false,对super的调用不会改变这一点,除了创建另一个同名变量(新引用)并将其设置为true。因此,预期的产出将是

false
true
输出将是:

false
true
false
true
super.aMethod()
将执行超类的
aVariable=true


子类的
aVariable
将保持
false

为什么不编译并运行它?在调用aMethod()的子类中添加一个main方法,看看输出是什么?呃,我还需要一个解释..Thx用于您的演示,但当我将其粘贴到eclipse时,它不起作用,并且假设我没有main方法,并且像以前一样从其他类运行main方法,调用super.aMethod();子类上的变量值未更改为true?在项目资源管理器中右键单击类名,然后选择运行方式。。。→ Java应用程序。@James:是的,您已经将类作为超类公开,但主方法是在子类上声明的。如果删除超类上的public关键字,它应该work@ankitjava
super.aMethod()它会改变。我的意思是条件
aVariable=false。但是为什么println之前的super.aMethod()对aVariable没有影响?如上所述,super.aMethod()更改了超类aVariable的值,而子类aVariable的值保持不变