以下是我的ProtectedConstructor.java
源代码:
package protectCon;
public class ProtectedConstructor{
public int nothing;
ProtectedConstructor(){
nothing = 0;
}
}
以下是UsingProtectedCon.java
source:
package other;
import protectcon.ProtectedConstructor;
public class UsingProtectedCon extends ProtectedConstructor{ //**Line 4**
public static void main(String... a) {
}
}
当我编译时UsingProtectedCon.java
,我在上面显示的第 4 行出现错误。它说 ProtectedConstructor() 不是 public ;所以无法在包外访问。
但是,由于我的课程是公共的,我是否应该能够将其扩展到包之外。无论如何,我不会创建它的任何实例。
现在,如果我创建以下构造函数ProtectedConstructor
类为public
or protected
然后代码编译良好,没有错误。
那么为什么构造函数也必须是public
or protected
,而不只是有默认访问权限?
如果你想在其包之外扩展一个类,它必须有一个构造函数public
or protected
因为在 Java 中,每个构造函数都必须调用其超类的构造函数。
正因为如此,有一个隐含的super()
调用每个没有的构造函数this()
或显式调用super()
作为其第一个声明。如果你根本不指定构造函数,Java 将添加一个默认的无参数构造函数,因此实际上你的代码如下所示:
public class UsingProtectedCon extends ProtectedConstructor {
public UsingProtectedCon() {
super();
}
public static void main(String... a) {
}
}
换句话说,您的代码无法编译,因为调用super()
在默认构造函数中无法解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)