2013-10-30 62 views
-4

隐式超级构造函数示例()对于默认构造函数是不可见的。必须定义一个显式构造函数。是因为我定义了一个私有构造函数,然后尝试继承其他类中的类?使用私有构造函数继承一个类

+0

而你的代码是...? –

+3

如果该类唯一的构造函数是声明为'private'的无参数构造函数,则不能有子类。 – afk5min

+0

为什么你们投下这样的问题,如果这对你来说太简单了,那不适合其他人。 –

回答

6

这是因为我定义了一个私有构造函数,然后尝试继承其他类中的类?

是的。如果你的只有构造函数是私有的,那么你不能创建该类的子类,因为没有可访问的构造函数可以链接到 - 将嵌套类留在一边(在可访问性发生变化的地方)。

考虑让你的构造函数受到保护,如果你真的想要能够继承原始类。

+0

+1你可以有嵌套的子类。您必须决定是否需要可以从其他类使用的构造函数,例如受保护的,或者你没有。 –

+0

@PeterLawrey:IIRC在Java中,嵌套子类将无法访问封闭类的私有构造函数(与C#不同),但是*可能会*使外部类子类成为具有私有构造函数的嵌套类。 。如果由于其他原因合法。我不想在这里进入。 –

+0

这在Java的'公共类A编译就好{ 私营A(){ } 静态类B扩展A { 私人B(){ } } 静态C级扩展B { 私人C( ){ } } } ' –

0

如果你想要子类,那么你需要从子类的构造函数中显式地调用超级构造函数,并且由于它是私有的,所以你不能调用它!因此,从被保护的子类创建超级类的构造函数至少可访问。