想知道以下 Java 程序的输出

Wondering about the output of the following Java program

我正在处理一些过去的试卷,在这里我不确定输出结果。我想我不清楚extends和super.

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);
    }
}

我认为第二个输出是正确的,因为它会引用超级 class 并且它是一个对象。但是,我不确定第一个输出。它只是一个值并打印 false 还是它也是一个对象?

我进行了科学实验(复制粘贴和 运行)并打印出来 错误的 真

更多信息:

If you overwrite a field in a subclass of a class, the subclass has two fields with the same name(and different type)?

输出将是:

false
true

因为在您的 SubclassaVariable 默认为 false(因此分配 aVariable = false; 是不必要的)。详细了解 Primitive Data Types default values
Superclass 中,您通过使用关键字 super: super.aMethod(); 调用超类的方法将 aVariable 初始化为 true。阅读更多关于 Accessing Superclass Members.

看看demo

因为它们都在它们自己的 class 块范围内,所以它们具有相同的名称并不重要。现在看起来,您将 aVariable 设置为 false,对 super 的调用不会改变它,除了创建另一个具有相同名称的变量(新引用)并将其设置为 true。所以预期的输出是

false
true

输出将是:

false
true

super.aMethod() 将执行 SuperClass

的 making aVariable = true

aVariable 的 SubClass 将保留 false.