我正在学习超级关键字,无意中得到了这个,下面是一个例子:
public class A {
double a;
public A (double a) {
this.a = a;
}
}
public class B extends A {
public B (double b) {
super.a = b; //***
}
}与本教程中一样,通常的方法是通过super(b)重用其父构造函数,但是super.a = b的错误之处在于
发布于 2020-11-13 05:32:54
当你像这样写A类的时候:
public class A {
double a;
public A(double a) {
this.a = a;
}
}您覆盖了默认的构造函数,并在this.a = a行中访问实例变量并在类B中设置值:
public class B extends A {
public B(double b) {
super.a = b; // ***
}
}你正在尝试通过构造函数访问B类的实例变量,因为在这里的super.a中,超级引用了构造函数,它是错误的,并抛出了Implicit super constructor A() is undefined. Must explicitly invoke another constructor,这意味着:在B类中,它寻找一个没有参数的构造函数,因为你覆盖了类的默认构造函数,它无法通过调用super.a = b来识别它,所以你必须在第一行代码中将超级构造函数作为一个函数来调用:
public class B extends A {
public B(double b) {
super(b);
super.a = b; // ***
}
}发布于 2020-11-13 05:23:36
Java中没有“构造函数继承”。如果超类没有无参数的构造函数,则必须显式调用它的构造函数(如果有多个构造函数,则调用其中的一个)。如果你不这样做,你会得到一个编译错误。
https://stackoverflow.com/questions/64811889
复制相似问题