第十八条:接口优于抽象类

来源:互联网 发布:淘宝怎么搜高仿手表 编辑:程序博客网 时间: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
原创粉丝点击