假设我有一个班级:
package inheritanceexample;
public class SuperClass {
public SuperClass() {
System.out.println("super class constructor 1");
}
public SuperClass(int a) {
System.out.println("super class constructor 2");
}
public SuperClass(int a, int b) {
System.out.println("super class constructor 3");
}
}
public class SubClass extends SuperClass {
public SubClass() {
System.out.println("sub class constructor 1");
}
public SubClass(int a) {
System.out.println("sub class constructor 2");
}
public SubClass(int a, int b) {
System.out.println("sub class constructor 3");
}
}
public class SubClass1 extends SubClass {
public SubClass1(int a) {
super(a);
System.out.println("sub class 1 constructor 1");
}
}
如何使用参数访问超类中的构造函数,让我们说构造函数SuperClass(int a)
,如果我要在SubClass1
extends SubClass
中访问它,那么当我将super(int a)
放在SubClass1
中,它只访问或执行它扩展的子类中的构造函数。我可以直接在SubClass1
中使用参数访问超类中的构造函数吗?
答案 0 :(得分:1)
你不能跳过构造函数的级别:如果中间的类(即subclass
)没有公开调用superclass
的特定构造函数的构造函数,则subclass
的子类没有更长的时间能够访问这些构造函数。
super
关键字可让您完全跳过一级;不允许跳过多个级别。
此规则非常有意义:subclass1
subclass
扩展superClass
是一个实现细节。subclass1
让superClass
调用superclass
的构造函数超过其自己的超类的头部将破坏{{1}}的封装。