想知道下面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@ankitjavasuper.aMethod()代码>它会改变。我的意思是条件aVariable=false这里不需要代码>。但是为什么println之前的super.aMethod()对aVariable没有影响?如上所述,super.aMethod()更改了超类aVariable的值,而子类aVariable的值保持不变