创建类的受保护构造函数有什么好处和缺点

Fer*_*ano 3 java constructor protected

我有一个愚蠢的怀疑,但我想听听一些有关它的意见.

我有一个超类(MySuperClass),然后,我有70个继承自这个超类(Bean类)的类.

这个超类的目的是使用反射实现"toString"方法,这样,我确保所有这70个类都有toString方法.这70个类是bean,最终目的是记录类信息而不仅仅是类的实例.

然而,这不是我想要讨论的内容,我想听到的是你对超级类的受保护构造函数,有这个的好处和缺点有什么看法,不仅对于这个特定情况而且对于其他您可以想象的情况或场景.

问候,

费尔

rua*_*akh 6

如果您的目标是确保MySuperClass永远不会直接通过实例化new MySuperClass(),只有它的子类,那么声明该类更有意义abstract; 请参阅http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html.这真的是抽象类的重点.然后构造函数可以是public或者protected,它并不重要.

究其原因有所有构造函数protected - abstract类是,如果你打算实例化类本身使用new MySuperClass(),但只希望它被实例化子类及其包装的其他成员(如"工厂"对象).但这听起来并不像你想要做的那样.

  • @FernandoMoyano:是的,但*为什么*你想不允许公共实例化你的超类?这听起来像你真正想要的 - 或者真的*应该*想要的 - 是根本不允许任何直接实例化你的超类.也就是说,听起来这个类除了*作为超类之外没用,而且没有理由让这个超类的实例不是它的一个子类的实例. (2认同)