- 对于abstract class和interface的选择反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。
- 一个类可以继承多个接口,当没有缺省的实现用来继承时,通常使用接口而不适用抽象类。
- 抽象类可以有私有方法和私有成员,接口是公开的,里面不能有私有成员和方法。
- 抽象类中可以赋予方法默认行为,接口中方法不能有默认行为。
- 实现抽象类可以有选择地重写需要用到的方法,实现接口的一定要实现接口里定义的所有方法。
- 接口可以实现多重继承,而一个类只能继承一个父类,但可以通过继承多个接口实现多重继承。
- 抽象类中可以有自己的数据成员,默认是protected 型,其值可以在子类中重新定义,也可以重新赋值。接口中只能够有静态的不能被修改的数据成员 即必须是static final(默认为public static final) 的并必须给其初值(接口中一般不定义数据成员)
- 抽象类中可以有abstract的成员方法,也可以有非 abstract的成员方法 接口中所有的成员方法都是abstract的,默认都是 public abstract 类型
- 两者都不能被实例化。 从某种意义上说,interface是一种特殊形式的 abstract class 一般的应用里,最顶级的是接口,然后是抽象类实现接 最后才到具体类实现。
- 抽象类主要用来进行类型隐藏,在Java语言中体现了一种继承关系 要想使得 继承关系合理 父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同。 对于接口则并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。
- 通过接口定义行为能够更有效地分离行为与实现,为代码的维护和修改带来方便,其中的关键在于区分对象的行为和对象的实现
- 行为模型应该总是通过接口而不是抽象类定义 行为模型应该总是通过接口而不是抽象类定义
抽象类 vs 接口(Java)
最新推荐文章于 2023-04-02 21:22:24 发布