whi*_*hat 6 java inheritance constructor default access-modifiers
以下是我的ProtectedConstructor.java
源代码:
package protectCon;
public class ProtectedConstructor{
public int nothing;
ProtectedConstructor(){
nothing = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是UsingProtectedCon.java
来源:
package other;
import protectcon.ProtectedConstructor;
public class UsingProtectedCon extends ProtectedConstructor{ //**Line 4**
public static void main(String... a) {
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译时UsingProtectedCon.java
,我在上面的第4行得到错误.它说ProtectedConstructor()不公开; 所以不能在包外访问.
但是,由于我的班级是公开的,我不应该将其扩展到包外.无论如何我不创建它的任何实例.
现在,如果我将ProtectedConstructor
类的构造函数作为public
或者protected
然后代码编译好没有错误.
那么,为什么是必要甚至构造是public
或protected
,而不是仅仅有默认的访问?
Dav*_*ebb 13
如果你想扩展它的包外的类必须有一个构造函数是public
或protected
因为Java中的每个构造函数必须调用其超类的构造函数.
因此,super()
每个构造函数中都有一个隐含的调用,它没有this()
或显式调用它super()
作为它的第一个语句.如果你没有指定一个构造函数,Java将添加一个默认的无参数构造函数,所以实际上你的代码如下所示:
public class UsingProtectedCon extends ProtectedConstructor {
public UsingProtectedCon() {
super();
}
public static void main(String... a) {
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,您的代码无法编译,因为super()
无法解析默认构造函数中的调用.
归档时间: |
|
查看次数: |
10502 次 |
最近记录: |