java是面向对象的语言。在面向对象的概念中,一切事物都是对象,所有的对象都是用类来描述的。事物有个性和共性。描述事物抽取出来的共性的类就是抽象类。
事物(对象) | 事物的个性 | 事物的共性 |
---|---|---|
类(属性+方法) | 一般类 | 抽象类 |
举例 | 苹果 | 水果 |
在Java语言中, 抽象类和接口是支持抽象定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。抽象类和接口之间在对于抽象定义的支持方面具有很大的相似性,甚至可以相互替换。
1.语法层次的不同 参考一,二部分。
2.抽象层次的区别 抽象类是对一类事物的抽象。接口是对行为的抽象。 抽象类是对整个类整体的属性,行为进行抽象。 接口是对类局部行为进行抽象。 举例说明: 飞机和鸟是不同的事物,它们拥有共同的行为,会飞。 可以将飞机设计一个类,鸟设计一个类,因为两者都是事物。 但是飞行是个行为特性,不能设计一个类,应该设计成一个接口。
3.描述层次的区别 我们日常生活中可以看到各种”接口”,例如电源插座。制造电源插座的厂商和制造电器的厂两者之间约定了一个生产规则,约定了一个”接口”之后,不同的电器就都能使用电源插座。 由此可知,接口的本质是协议,是对事物之间规则的描述,不是对事物的描述。 在Java中: 1.抽象类也是类,类是对现实事物的描述。 2.接口不是类,接口是用来建立类与类之间的协议。接口是对事物之间规则,行为的描述。
4.设计层次的不同 1.抽象类的设计理念是“is-a”,接口的设计理念是“like-a”,是问题领域不同。 2.抽象类的设计目的是为了提高代码的复用性。是模板式设计。接口的设计目的是为了实现”设计与实现的分离”,降低程序中的耦合性。是辐射式设计。 3.在“缺省适配模式”中,声明类型的工作由Java接口承担。但是同时给出一个Java抽象类,且实现了这个接口。而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类。也就是说,在层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是普通类。 4.在面向对象程序设计中,对于接口,有一个核心原则就是Interface Segregation Principle(接口隔离原则): 1)使用多个专门的接口比使用单一的总接口要好。2) 一个类对另外一个类的依赖性应当是建立在最小的接口上的。3)一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
简化总结
抽象类 | 接口 |
---|---|
类 | 不是类 |
对事物描述 | 对事物之间规则描述 |
对类整体抽象 | 对类局部行为抽象 |
模板式设计 | 辐射式设计 |
is-a理念 | like-a理念 |
目的是提高复用性 | 目的是降低耦合性 |
为继承而生 | 为多态而生 |
新闻热点
疑难解答