繁体   English   中英

Java为什么不允许不能访问其超类的任何构造函数的子类?

[英]Why does Java disallow subclasses which cannot access any constructors of its super class?

这个问题主要是参考Luiggi对这个SO问题的回答: 为什么不能从构造函数为private的类继承?

我知道Java强制每个子类构造函数都必须调用其超类的构造函数之一。 如果所有超类的构造函数都是私有的,那么这显然是不可能的。 因此,如果子类理论上可以从具有私有构造函数的超类继承,那么结果将是您无法在子类上调用构造函数。

但是,如果我从不打算创建子类的实例怎么办? 例如,如果我的子类仅添加静态字段和方法,而我仅对使用超类的静态字段和方法感兴趣,该怎么办? 然后,我不需要为子类构造函数。

如果我的子类仅添加静态字段和方法,而我仅对使用超类的静态字段和方法感兴趣,该怎么办?

在那种情况下,您不需要继承-使用组合

您应该通过将其声明为final来封闭您的课程。 这样就可以保证不能创建任何子类

如果仅添加子类并且只能创建父类,则子“类”实际上只是一个辅助类,而没有添加任何功能/职责/等。 给父母 在许多方面,它是没有意义的。

这种子类将不是合法的子类。 即使将其所有字段和方法都声明为静态,它也将继承其所有超类的所有字段和方法,一直返回到Object。 并且Object中有非静态方法。 因此,此子类在其声明中将具有一组非静态方法(可能还有字段)。

然后,可以将该子类用作字段,变量,类型参数或方法参数的类型(即,可以使用任何类型的类型)。 编译器必须跟踪这一特定类型只能在某种受限意义上使用的事实。 (例如,假设有一个方法返回了该子类的值)。

我敢肯定,这类事情还有更多的陷阱。

因此,最重要的是,这将使编写编译器非常困难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM