首页 > 代码库 > Thinking In Java 对象导论(4)
Thinking In Java 对象导论(4)
复用的具体实现
①代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
最简单的复用某个类的方法是直接使用这个类的一个对象,此外也可以将那个类的一个对象置于一个新的类中。我们将其称为:创建一个成员对象。
②组合
使用现有的类合成新的类叫组合。动态发生的组合叫聚合。组合被视为“has-a”关系。因为组合更加灵活,在建立新类时应该首先考虑组合。
③继承
通过继承达到以现有的类为基础,复制它然后通过添加和修改这个副本来创建新类。当源类(父类)发生变化时,被修改的副本(子类、导出类或继承类)也会反映出这些变化。
一个基类包含所有导出类型所有共享的特性和行为。
当继承现有类型时,也就创造了新的类型。这个新类型不仅包含了现在类型的所有成员(尽管private成员被隐藏并且不可访问),更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。由于通过发送给类的消息的类型是可知类型,所有就意味着导出类与基类拥有相同的类型。
使基类与导出类产生差异的两种方法:1.直接在导出类中添加方法。2.改变现有基类的方法的行为(在导出类中 覆盖 overriding 基类的那个方法)。
④is-a 与 is-like-a
处理继承的理想方式:纯粹替代(替代原则),导出类和基类是完全相同的类型,具有完全相同的接口,可以用一个导出类对象来完全替代一个基类对象。(is-a)
但有时必须在导出类型中添加新的接口,这样也就扩展了接口,这个新的类型仍然能够替代基类,但是这种替代不完美,因为基类中无法访问新添加的方法。(is-like-a)
用替代原则的方式来设计是很好的,但是我们经常必须在导出类的接口中添加新的方法。
Thinking In Java 对象导论(4)