想知道以下 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
因为在您的 Subclass
中 aVariable
默认为 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
.
我正在处理一些过去的试卷,在这里我不确定输出结果。我想我不清楚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
因为在您的 Subclass
中 aVariable
默认为 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
aVariable = true
aVariable
的 SubClass 将保留 false
.