Ans*_*shu 25 java inheritance constructor superclass
这不仅仅是一个难题而不是问题.我有以下代码:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里对super();1*的调用是允许的事件,尽管基类构造函数是private.如果我们将类作为单独的类编写在同一个包中:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
Run Code Online (Sandbox Code Playgroud)
由于基类构造函数不可见,编译器正确地在2*处给出错误.
当两个类在一个类中声明为静态时,为什么编译器不会在我的第一个场景中抛出错误?
irr*_*ble 29
如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1
| 归档时间: |
|
| 查看次数: |
8176 次 |
| 最近记录: |