gpt4 book ai didi

java - 在构造函数中访问实例成员

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:55 25 4
gpt4 key购买 nike

我在一本书上看到,实例成员只有在 super 构造函数运行后才能访问。

我偶然发现了以下代码:

class Parent {

Parent() {
printIt();
}

void printIt() {
System.out.println("I'm in a overridden method. Great.");
}
}

class Child extends Parent {

int i = 100;

public static void main(String[] args) {
Parent p = new Child();
p.printIt();
}

void printIt() {
System.out.print(i + " ");
}
}

并打印:

0100

我的问题是:

如果实例成员只有在 super 构造函数运行后才能访问,那么为什么在执行类 Parent 的 printIt() 方法时(由于多态性,实际上是 Child 的 printIt()),它能够Parent的构造函数还没有执行完就访问Child未初始化的实例变量i?

我错过了什么?

最佳答案

I read in a book that instance members are accessible only after the super constructor runs.

你的书错了(如果它真的是这么说的话)。一旦施工开始,它们随时都可以访问。但是,在 super 构造函数运行之前,它们不会被初始化。所以您打印的是默认值:null、零或 false。

关于java - 在构造函数中访问实例成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com