第十八条:接口优于抽象类
来源:互联网 发布:淘宝怎么搜高仿手表 编辑:程序博客网 时间:2024/06/06 00:55
一、接口与抽象类的区别
接口:只允许定义方法,不允许实现方法。
抽象类:允许定义方法,并允许实现某些方法。
二、抽象类的缺点
概述:由于抽象类是继承制,说明如果使用了抽象类会改变类的层级。(层级指的是类的继承关系)
但是接口,就可以在任何层级上使用。这就导致了抽象类很多方法不如接口。
①、接口容易被更新,而抽象类却不容易被更新。
比如说:JAVA平台多了Comparable接口,许多类都可以实现该接口(接口可以无视层级的使用)。但是如果多了一个Comparable抽象类,其他类实现该抽象类,必须使用继承,使用继承就会破坏原有的类层级结构。(比如:某个类有三个子类,有两个类想使用Comparable类抽象的方法,但有一个子类不想使用Comparable类抽象的方法)。
②、接口是定义混合类型的理想选择
接口的优点:
首先,一个类可以创建多个接口,所以一个类可以成为多个类型。
其次,接口也可以表示为可选择的行为。也就是说如果我不需要我就不使用接口。
抽象类的缺点:
抽象类:无法拥有可选择的行为
③、接口可以实现无层次接口结构的类型
比如说:有歌唱家、演员两个接口。
<span style="font-size:18px;">public interface Singer{ void sing();}public interface Actor{ void act();}</span>但是一个人可以既是歌唱家,也可以是演员。
public class Person implements Singer,Actor{ public void sing(){//}; public void act(){};}
//或者这样实现public interface SingerActor extends Singer,Actor{ void sing(); void act(); <span style="font-size:18px;">}</span>但是如果使用继承方式的话:
就必须要有三个类:歌手、演员、既是歌手又是演员。
如果身份再增加下去,就会以2*n递增。
三、抽象类的优点
①、结合接口实现骨架实现(一般被称为AbstractInterface Interface表示接口)
比如:AbstratMap、AbstartList等等。
什么是骨架实现,如何实现
简单来讲,就是抽象类继承接口,不实现基本类型的接口方法,实现需要
不实现基本类型接口的方法很好理解。 就是继承接口,然后再将无需实现的方法设为abstract,继续传递给子类实现。
那么什么叫做实现接口方法的逻辑呢。
比如说,有一个接口叫做Cook,其中有两个方法,①、放入的材料add() ②、制作的类型type() ③、制作cook();
public interface Cook{ void add(); void type();
void cook();然后我们创建抽象类继承这个接口
<span style="font-size:18px;">public abstract AbstractCook { abstract void add(); abstract void type(); public void cook(){ //...根据上诉方法,制作具体类型的菜 }}</span>
0 0
- 第十八条:接口优于抽象类
- 第18条:接口优于抽象类
- 第18条:接口优于抽象类
- 第18条:接口优于抽象类
- 接口优于抽象类
- 接口优于抽象类
- 接口优于抽象类。
- Effective Java 第 18 条:接口优于抽象类
- 第18条 类与接口——接口优于抽象类
- 《Effective java》读书记录-第18条-接口优于抽象
- Effective Java读书笔记-接口优于抽象类
- EffectiveJava之16-★接口优于抽象类
- effective java(18) 之接口优于抽象类
- 学习effective java-18类和接口之接口优于抽象类
- Effective Java 18:接口优于抽象类 Prefer interfaces to abstract classes
- 2015070303 - EffactiveJava笔记 - 第53条 接口优于反射机制
- 第20条:类层次优于标签
- 接口优于反射
- java向zip文件中添加新文件
- FRM 数量分析笔记之线性回归
- C/C++ 连接两个字符串
- 鼠标悬停在表格任意一个<td>上改变整行背景颜色并在第一个td显示象征性的某图片
- Spring 3整合Quartz 2实现定时任务一:常规整合 (基于maven构建)
- 第十八条:接口优于抽象类
- Leetcode 376. Wiggle Subsequence 摇摆序列 解题报告
- UIView的init与initWithFrame的调用顺序
- Java中return的使用
- angularjs的使用:$scope与双向数据绑定,自动注入(6)
- 解析URL
- 快速排序
- 如何用命令行执行LoadRunner的脚本
- Facebook Android SDK 4.14使用详解(2016.8)