第18条:接口优于抽象类

原创 2012年03月25日 21:38:44
Java语言设计提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。
因为Java只允许单继承,所以抽象类作为类型定义受到了极大的限制。


现有的类可以很容易被更新,以实现新的接口。
一般来说,无法更新现有的类来扩展新的抽象类。如果你希望两个类来扩展一个抽象类,就必须把抽象类放到类型层次的高处,以便这两个类的一个祖先成为他的子类。这样会间接的伤害到类的层次,迫使这个公共祖先的所有后代类都扩展这个新的抽象类,无论他对于这个后代类是否合适。


接口是定义mixin(混合类型)的理想选择。类除了实现他的“基本类型(primary type)”之外,还可以实现这个mixin类型,以表示提供了某些可供选择的行为。


接口允许我们构造非层次结构的类型框架。


包装类(wrapper class)模式,接口使得安全地增强类的功能成为可能。


通过对你导出的每个重要接口都提供一个抽象的骨架实现(skeletal implementation)类,把这个抽象类的优点结合起来。


必须认真研究接口,并确定哪些方法是最为基本的(primitive),其他的方法则可以根据他们来实现。这些基本的方法将成为骨架实现类中抽象方法。然后,必须为接口中所有其他的方法提供具体的实现。


抽象类的演变比接口的演变要容易的多。


接口一旦被公开发行,并且已被广泛实现,再想改变这个接口几乎是不可能的。

相关文章推荐

hibernate 值类型的set、bag、list和map (非实体bean类型的)

选择集合接口:  1、使用元素映射java.util.Set。使用java.util.HashSet初始化集合。它是无序且不允许重复。  2、使用映射java.util.SortedSet。且so...

不通过App Store,在iOS设备上直接安装应用程序

http://blog.csdn.net/sing_sing/article/details/7489906
  • xyxjn
  • xyxjn
  • 2014年07月03日 11:17
  • 2991

Java-面向对象(高级篇)--抽象类与接口的应用

抽象类与接口的应用 一. 抽象类的实际应用——模板设计 通过对象的多态性可以为抽象类实例化,那么抽象类该如何使用那?假设人分为学生和工人,学生和工人都可以说话,但是说的内容不相同,那么说话的功能...

抽象类和接口的区别

  • 2014年04月23日 19:24
  • 3KB
  • 下载

关于接口和抽象类的案例

  • 2014年08月25日 21:28
  • 619B
  • 下载

工作总结-C#抽象类,接口,以及UnityAction

C#的抽象类及接口设计蛮奇怪。先说抽象类,抽象类允许抽象方法,也允许不抽象的方法。额外一提,当你使用子类去继承基类完成方法重写时,千万要记得用override来修饰你的方法声明,否则c#不会认为你在重...

Java抽象类和接口

  • 2014年09月13日 12:15
  • 1KB
  • 下载

JAVA中抽象类与接口的区别

  • 2014年05月06日 22:23
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第18条:接口优于抽象类
举报原因:
原因补充:

(最多只允许输入30个字)