在java中研究过,如果一个类有私有构造函数,它不能被继承为super()
,不能被调用,而不是为什么这个代码编译,如果是内部类:
public class TestMe2 {
class Singleton {
private Singleton() {
}
}
class BB extends Singleton {
}
public void callMe(){
Singleton sing=new BB();
}
}
答案 0 :(得分:2)
答案 1 :(得分:2)
private关键字限制您在同一文件中访问它所引用的构造函数/ fubction / variable。这意味着在内部类中,您实际上可以访问私有构造函数/方法/变量
要添加到我的答案中,如果您的BB位于不同的文件中,您将遇到问题,并且java编译器会要求您定义另一个非默认构造函数
编辑: 错误地提到“同一档案”。 private关键字限制访问包含成员或构造函数声明的顶级类(第7.6节)的主体内部
感谢@JB Niget
答案 2 :(得分:0)
BB
是默认构造的。默认构造函数是package-private和a class's constructor will always call the superclass constructor。具体做法是:
如果您不自己明确地执行此操作,则无论构造函数是私有还是公共,都会为您插入隐式调用。
所以Singleton.Singleton
仍然会被子类的构造函数调用。是的,与C ++相比,这并没有多大意义,其中private
确实意味着private
。
您可以拨打BB.BB
,因为您要从同一个套餐中调用它。