java - 这段代码的输出是什么以及如何输出?

标签 java object oop inheritance polymorphism

**Java代码-MySuper类是父类,并由MySub类扩展。我正在创建对象MySub mySub = new MySub()。我以为输出将是“y”,但是当我尝试运行代码显示 null 作为输出 **

class MySuper {
    String strl = "x";

    public MySuper() {
        myMethod();
    }

    void myMethod() {
        System.out.print(strl);
    }
}

class MySub extends MySuper {
    String str2 = "y";

    void myMethod() {
        System.out.print(str2);
    }

    public static void main(String[] args) {

        MySub mySub = new MySub();
    }
}   

最佳答案

MySub 使用的隐式构造函数如下所示:

class MySub extends MySuper {

  String str2;

  MySub() {
    super();
    str2 = "y";
  }

  // rest omitted for brevity
}

虽然内联字段初始化在技术上已移至构造函数中,但了解其本身并不一定重要。重要的部分是在子类的字段初始化之前调用 super 构造函数。因此,当 super 构造函数调用被子类重写的 myMethod() 方法时,str2 字段尚未被分配非默认值。这会导致您的代码打印出 null

这就是为什么您应该避免在构造函数中调用可重写方法的原因。

关于java - 这段代码的输出是什么以及如何输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72327619/

相关文章:

java - Java中序列化的目的是什么?

java - 如何在android中使用Service来使用showcase-view?

javascript - 搜索匹配属性和等效属性值

java - 从Java中资源文件夹的子文件夹加载文件

java - 对象数组添加仅添加最后一条记录

javascript - 根据字符串数组过滤对象数组

python - 如何使一个抽象类从Python中的另一个抽象类继承?

python - 为什么这个 python 类实例是可哈希的?

java - 在java中一次加载3个json文件到neo4j数据库中

java - 同步 int、long 或 String 值以及 AND/OR 选项?