这几天看接口的相关知识,觉得还是记录下来,以便以后复习。抽象类和接口的比较如下:
比较 | 抽象类 | 接口 |
定义 | 抽象类可以以偶用public,abstract,final,修饰 不用public,则默认包访问权限,但不能用protected修饰。 | 接口可以用public,abstract修饰 隐式地为abstract. 不用public,则默认包访问权限,但不能用protected修饰。 |
属性 | 可以任意的定义属性,和普通类没有区别。 | 属性域默认为static和 final的 |
方法 | 可以任意定义方法,修饰词没有限制,和普通类相同。既可以定义普通方法体,也可以定义抽象方法,这是普通类所不可以的。 | 方法隐式地为public和abstract的。并且不可以用protected和static修饰。 |
接口使抽象的概念更向前迈进了一步。接口更像是抽象类的抽象。但是接口不仅仅是一个极度抽象的类,它还允许我们通过创建一个能够向上转型为多种基类的类型,来实现某种类似多重继承的特性。另外,内部类也有间接实现多重继承的意思。一定要记住的是,我们之所以使用接口,核心原因就是:为了能够向上转型为多个基类型。
选择抽象类还是接口?
编程思想涨势这么说的,恰当的原则应该是优先选择类而不是接口,从类开始。如果接口的必须性,变得非常明确,那么就进行重构。任何抽象性都应该是应真正的需求而产生的。接口是一种重要的工具,但是它们容易被滥用。
例子:
接口被经常用得到的地方是Collection Framework。这个框架定义了一组非常重要的接口,它们是由一组多个类实现的。通过仅仅研究主要的接口,你可以有效的掌握整个框架,因为特别的实现类一般不影响设计的整体。