超类应该知道子类吗?

时间:2014-03-09 10:10:43

标签: software-design

我正在寻找这个问题的答案: 超级班应该知道子类吗?

示例:

abstract class A {
 add(B) // Here is my problem. I am not really sure but is it correct the super class
 // knows about "B" - the subclass?
}

class B extends A {
}

这不好吗?如果是这样,这是解决方案:

abstract class A {
  add(InterfaceB);
}

class B extends A implements InterfaceB {
}

interface B {}

2 个答案:

答案 0 :(得分:0)

通常认为超类不了解其子类更好。这样做是为了保持程序modular并且更容易维护。

解决方案实际上取决于您要做的事情。您的代码看起来可能是Linked List实现,但我可能错了。

答案 1 :(得分:0)

超类的属性和行为对于所有子类都是通用的。所以Design 2nd比1st更好。

但这也取决于你想要做什么。如果您的超类对子类的数据项执行某些计算,并且所有子类都需要该功能。转到第二个解决方案,但如果你想要特定类型的子类的这个功能,那么去吧 解决方案1。