Java 为什么可以';我们不能在子类中显式调用父构造函数吗?
我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。若我们谈论方法,它可以很容易地在子构造函数中调用Java 为什么可以';我们不能在子类中显式调用父构造函数吗?,java,Java,我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。若我们谈论方法,它可以很容易地在子构造函数中调用 class F { F() { System.out.println("F"); } } class G extends F { G() { F(); } public static void main(String args[]){ new G(); } } G() {
class F {
F() {
System.out.println("F");
}
}
class G extends F {
G() {
F();
}
public static void main(String args[]){
new G();
}
}
G() {
new F();
}
输出
您可以调用它,但您使用了错误的语法。使用:
G() {
super();
}
super()
调用超级类构造函数
class F {
F() {
System.out.println("F");
}
}
class G extends F {
G() {
F();
}
public static void main(String args[]){
new G();
}
}
G() {
new F();
}
只有在创建类的对象时才调用构造函数。你不能简单地称之为它(语言就是这样设计的)。在您的例子中,您可以创建一个对象,该对象反过来调用构造函数
class F {
F() {
System.out.println("F");
}
}
class G extends F {
G() {
F();
}
public static void main(String args[]){
new G();
}
}
G() {
new F();
}
如果要调用超类的构造函数,请使用
G() {
super();
}
如果要创建新对象,必须使用“new”关键字:
Java编译器可以告诉您需要通过关键字
super
调用此实例的父类构造函数。如果显式键入构造函数名称,则无法确定需要在哪个实例中调用构造函数方法。这就是为什么需要使用关键字new
来指示需要在新实例中调用构造函数方法的原因 您可以使用super()调用父级构造函数代码>我想调用显式..@AshwiniPandey您所能做的就是调用super()(在本例中是隐式的)。不,我想显式调用,因为构造函数不能像普通函数一样直接调用,所以您需要new
操作符。我知道………但是为什么不能显式调用呢?由于一个类只有一个超类,super()尽可能显式。@AshwiniPandey因为Java中调用超类构造函数的正确语法是使用super
,而不是使用超类的名称。Java就是这样设计的。抱怨你想要的不同是没有用的。。。你为什么想要这个?我知道…………但为什么不能明确地给出答案。@AshwiniPandey,因为语言就是这样设计的