class Super {
protected int a;
protected Super(int a) { this.a = a; }
}
class Sub extends Super {
public Sub(int a) { super(a); }
public Sub() { this.a = 5; }
}
public Sub() { this.a = 5; }
Run Code Online (Sandbox Code Playgroud)
this.a = 5不起作用.为什么会这样?受保护的和公共成员应该被继承.
问题不在于您访问变量,而是您没有调用基础构造函数:
class Super {
protected int a;
protected Super(int a) { this.a = a; }
}
class Sub extends Super {
public Sub(int a) { super(a); }
public Sub() {
super(0); // <-- call base constructor
this.a = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您没有为其定义默认构造函数Super
,因此如果您没有指定构造函数,派生类就不知道要调用哪个构造函数.
归档时间: |
|
查看次数: |
2070 次 |
最近记录: |