【问题标题】:Wondering about the output of the following Java program想知道以下 Java 程序的输出
【发布时间】:2017-05-20 00:27:35
【问题描述】:

我正在处理一些过去的试卷,在这里我不确定输出。我想我不清楚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);
    }
}

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

【问题讨论】:

  • 为什么不编译运行呢?向调用 aMethod() 的子类添加一个 main 方法,看看输出是什么?
  • err 我也需要解释一下..

标签: java subclass extends superclass super


【解决方案1】:

输出将是:

false
true

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

看看demo

【讨论】:

  • 感谢您的演示,但是当我将其粘贴到 Eclipse 时,它​​不起作用,并假设我没有 main 方法并像以前一样从其他类运行 main 方法
  • 所以,调用 super.aMethod();不会在 SubClass 上将 aVariable 值更改为 true ?
  • Project Explorer中右击你的类名并选择Run As... → Java Application
  • @James:是的,您将公共类设为超类,但主方法在子类上声明。如果您删除 SuperClass 上的 public 关键字,它应该可以工作
  • @ankitjava super.aMethod(); 它改变了。我的意思是条件aVariable = false;在这里是不必要的。
【解决方案2】:

输出将是:

false
true

super.aMethod() 将执行 aVariable = true 的 SuperClass

子类的aVariable 将保持false

【讨论】:

  • 但是为什么println之前的super.aMethod()对aVariable没有影响?
  • 如上所述,super.aMethod() 改变了 SuperClass 的 aVariable 的值,而 SubClass 的 aVariable 的值保持不变
【解决方案3】:

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

false
true

【讨论】:

    【解决方案4】:

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

    更多:

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

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2012-01-14
      相关资源
      最近更新 更多