super.a = b 而不是 super(b)
super.a = b instead of super(b)
我正在学习 super 关键字并且不小心得到了这个,这是一个例子:
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
有什么问题?
Java中没有“构造函数继承”。如果 super class 没有无参数构造函数,则必须显式调用其构造函数(如果有多个构造函数,则调用其中一个)。如果你不这样做,你会得到一个编译错误。
当你这样写 class A 时:
public class A {
double a;
public A(double a) {
this.a = a;
}
}
您覆盖了默认构造函数,在 this.a = a
行中您正在访问实例变量并设置值,在 class B:
中
public class B extends A {
public B(double b) {
super.a = b; // ***
}
}
你试图通过构造函数访问 Class B 的实例变量,因为这里的 super.a
,超级引用构造函数及其错误并抛出 Implicit super constructor A() is undefined. Must explicitly invoke another constructor
这意味着: 在 Class B
它寻找一个没有参数的构造函数,因为你覆盖了 class 的默认构造函数并且它无法通过调用 super.a = b
来识别它所以你有将超级构造函数作为函数调用,并在第一行代码中:
public class B extends A {
public B(double b) {
super(b);
super.a = b; // ***
}
}
我正在学习 super 关键字并且不小心得到了这个,这是一个例子:
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
有什么问题?
Java中没有“构造函数继承”。如果 super class 没有无参数构造函数,则必须显式调用其构造函数(如果有多个构造函数,则调用其中一个)。如果你不这样做,你会得到一个编译错误。
当你这样写 class A 时:
public class A {
double a;
public A(double a) {
this.a = a;
}
}
您覆盖了默认构造函数,在 this.a = a
行中您正在访问实例变量并设置值,在 class B:
public class B extends A {
public B(double b) {
super.a = b; // ***
}
}
你试图通过构造函数访问 Class B 的实例变量,因为这里的 super.a
,超级引用构造函数及其错误并抛出 Implicit super constructor A() is undefined. Must explicitly invoke another constructor
这意味着: 在 Class B
它寻找一个没有参数的构造函数,因为你覆盖了 class 的默认构造函数并且它无法通过调用 super.a = b
来识别它所以你有将超级构造函数作为函数调用,并在第一行代码中:
public class B extends A {
public B(double b) {
super(b);
super.a = b; // ***
}
}