我正在阅读J. Bloch的Effective Java,现在我正在学习继承与组合的区别。据我理解,他认为继承并不总是好的。
子类易受破坏的相关原因是它们的超类可能会在后续版本中获取新方法。假设一个程序依赖于所有插入到某个集合中的元素都满足某个谓词来保证其安全性。可以通过对集合进行子类化并覆盖每个能够添加元素的方法,以确保在添加元素之前满足谓词来保证此限制。这样做很好用,直到在后续版本中向超类添加了一种能够插入元素的新方法。
但是,为什么这行不通呢?超类只是Collection
接口,如果我们添加了一个新方法,只会在编译时出现错误,这并没有任何危害...
java.util.Collection
,那不是一个超类。那只是一个接口。 - Alderath