什么可以是Java中继承的坏例子?

Sup*_*eme 5 java oop inheritance

我知道Java中继承的优点,但我有点难以接受它也有缺点.任何人都可以在Java中给我一个糟糕的继承示例吗?

Boz*_*zho 7

  • Stack extends Vector.堆栈不是矢量.
  • Properties extends Hashtable.属性表不是哈希表.

有关Java的报价,请参阅此答案.

Stack通过使用已经实现的内容Vector(同样适用于Properties)来编写实现很容易,但它创建了问题 - 请参见此处


kro*_*ock 5

一个例子是实现常量接口(仅包含不可变字段的接口)的旧模式,然后希望使用这些常量的类将实现此接口以方便起见.问题是您的类现在继承了此接口的API,并且其设计的扩展可能会在将来损害您的API.

如今,以这种方式使用恒定接口通常被认为是反模式.从Java 5开始,您可以使用枚举而不是充满常量和静态导入的接口,而不是定义常量接口.

来自Josh Bloch的Effective Java:

常量接口模式是接口的不良使用.类在内部使用一些常量是一个实现细节.实现常量接口会导致此实现细节泄漏到类的导出API中.