gpt4 book ai didi

java - 隐式调用父类(super class)中的无参构造函数

转载 作者:行者123 更新时间:2023-12-01 20:26:14 24 4
gpt4 key购买 nike

这取自:http://docs.oracle.com/javase/tutorial/java/IandI/super.html

Note: If a constructor does not explicitly invoke a superclass constructor, the

Java compiler automatically inserts a call to the no-argument constructor of

the superclass.If the super class does not have a no-argument constructor,

you will get a compile-time error. Object does have such a constructor, so

if Object is the only superclass, there is no problem.

我做了这个小例子来测试:

类 P 作为父类(super class)(其空类):

package org.standro.com.pk1;


public class P {
}

与不同包中的类 N 不同,类 N 扩展了类 P,而无需显式调用 super() :

import org.standro.com.pk1.P;


public class N extends P {

public N() {
//imlicitly super() is called here .. that means the constructor of P

}

public static void main(String[] arg){
N n=new N();

}
}

并且没有编译错误..我使用JDK1.7这个例子有什么问题以及为什么我没有收到错误?

我认为上面加粗的那句话应该是:

如果父类(super class)没有任何构造函数,....

因为如果至少有一个构造函数..编译器将收到错误..

或者请如果有人有解释..

谢谢

最佳答案

由于类 P 扩展了 object,并且没有构造函数,因此它的构造函数默认为无参数构造函数,该构造函数隐式调用 Object 中的构造函数。

要引发错误,您需要向 P 的构造函数添加一个参数,如下所示:

public class P {

public P(int a) {
}
}

现在 N 尝试隐式调用 super(),它在 P 中查找无参数构造函数。但是,由于我们在 P 中添加了构造函数,因此无法再使用默认的无参数构造函数。

澄清:

如果没有构造函数,则添加默认的无参数构造函数。如果有任何类型的构造函数,则不会添加默认的无参数构造函数

关于java - 隐式调用父类(super class)中的无参构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450244/

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