没有实现的子类

时间:2018-04-03 14:39:35

标签: java oop

我陷入两难境地。

class A {
   protected int x;
}

class B extends A {
   private int y;
}

我可以在我的代码中使用这个层次结构,但是我想知道在这个层次结构中添加新类是否可以:

class C extends A {}

C类只适用于类型,因此我可以将A重命名为Base并且有两个继承自Base的类,但其中一个类与Base类完全相同。

什么是更好的解决方案?

2 个答案:

答案 0 :(得分:1)

没有实现的类是设计错误的标志,只有当您的某些行为因父级而异,才需要创建新类。因此,在您的情况下,您不需要创建C,只需将A重命名为Abstract,Base并将其抽象化。通过这种方式,您可以使用抽象类和实现(A和B),在进一步开发中,您可能需要另一个类型A的实现并从中进行扩展,只有这样才需要创建类C.

答案 1 :(得分:0)

代码是描述您正在解决的业务问题的抽象。如果在您的业务领域中有意义,那么没有什么可以阻止您引入空类。主要目标是使代码可读,引用Steve McConnell:

  

好的代码是它自己最好的文档。当您即将添加评论时,请问自己,'我如何改进代码以便不需要此评论?'改进代码然后将其记录下来以使其更清晰。

但是,如果您必须在BC中实施两次相同的方法,则不鼓励这样做。这会导致代码重复。

此方法通常与Marker Interface Pattern中的接口一起使用。