一、接口与抽象类的区别
接口:只允许定义方法,不允许实现方法。
抽象类:允许定义方法,并允许实现某些方法。
二、抽象类的缺点
概述:由于抽象类是继承制,说明如果使用了抽象类会改变类的层级。(层级指的是类的继承关系)
但是接口,就可以在任何层级上使用。这就导致了抽象类很多方法不如接口。
①、接口容易被更新,而抽象类却不容易被更新。
比如说: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>