第18条:接口优于抽象类

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


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


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


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


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


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


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


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


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

EffectiveJava(18)接口优先于抽象类

***接口和抽象类同样可以用来定义多个实现的类型,然而,接口通常是最佳途径.*** 这条规则有个例外 – 当演变的容易性比灵活性和功能性更为重要的时候,应该用抽象来定义类型 ,但前提是必须理解并且可...
  • JacXuan
  • JacXuan
  • 2017年03月03日 00:13
  • 8034

举例说明你什么时候会用抽象类,什么时候更愿意使用接口?

接口和抽象类都按照“不为实现写代码”的设计原则,这是为了增加代码的灵活性,以应付不断变化的要求。  在Java中,你只能继承一个类,但实现多个接口。所以你继承一个类的时候就无法再继承别的类了。  ...
  • xyw591238
  • xyw591238
  • 2016年05月19日 08:17
  • 2675

java中抽象类和接口的特点

java中抽象类的特点: 1. 如果一个类中有抽象方法,那么这个类一定是抽象类 2. 抽象类中不一定有抽象方法 3. 抽象类中可以存在抽象方法 4. 抽象类中可以存在构造方法 5. 抽象类中可以存在普...
  • u012586848
  • u012586848
  • 2016年08月02日 15:19
  • 2568

第18条 类与接口——接口优于抽象类

1、Java程序设计语言提供了接口和抽象类两种机制来定义允多个实现的类型。这两种机制的主要区别有: 1)抽象类允许包含某些方法的实现,但是接口则不允许。 2)为了实现由抽象类定义的类型,类必须成为抽象...
  • Xi__Yuan
  • Xi__Yuan
  • 2016年05月04日 15:38
  • 509

《Effective java》读书记录-第18条-接口优于抽象

接口和抽象类的区别 1.抽象类允许包含某些方法的实现,但是接口不允许。 2.为了实现由抽象类定义的类型,类必须成为抽象类的一个子类;只要类定义了所有必要的方法,并且遵守通用约定,它就被允许实现一个接口...
  • sunyx1130
  • sunyx1130
  • 2016年01月14日 13:46
  • 238

接口抽象类例子,自己备份,别人看了没有用

  • 2017年08月15日 12:05
  • 41KB
  • 下载

接口和抽象类使用详细实例源代码

  • 2017年11月03日 14:27
  • 49KB
  • 下载

抽象类和接口的区别

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

关于接口和抽象类的案例

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

Java抽象类和接口

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

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