假设我有一个扩展AbstractBarrelComponent
类的抽象类Component
。该类使用名为Barrel
的类来实现某些想象。
我的Barrel
类应驻留在哪里,如果能够/可以/应该使用它的唯一类是AbstractBarrelComponent
及其子类?
By"居住"我的意思是该类应该在自己的文件Barrel.java中,还是应该是AbstractBarrelComponent.java中的包受保护的类?对于这种情况,是否有共同的惯例?
答案 0 :(得分:1)
不同的程序员和组织对此使用不同的标准,我认为没有一个正确的答案。重要的是选择标准并坚持下去。
我个人的标准是内部类别总是私密的。如果子类需要访问它,那么它应该在外部受保护的类中,或者应该通过委托来访问其方法。唯一的缺点是你最终会有更多小班。但是,坦率地说,现代的清洁编码风格依赖于良好的IDE,可以轻松浏览代码,因此将导航分组的需求大多已经消失。
顺便说一句,我觉得不幸的是,Java的设计者没有区分受子类访问受保护和受同一名称空间中所有类访问的保护。这些是非常独立的用例。在您的情况下,有一种趋势是使它成为内部受保护的类而不是外部受保护的类来限制对子类的访问。如果这两种用途有一个单独的关键字会更好。