抽象類和接口在什么情況下適用?
點(diǎn)擊上方“程序IT圈”,選擇“設(shè)為星標(biāo)”
我們一起學(xué)編程!

?


前言
上篇文章《抽象類不能實(shí)例化》中,我在文章最后順嘴提了一下接口,就是當(dāng)時(shí)講抽象類的時(shí)候說(shuō)接口也是抽象類,是個(gè)特殊的抽象類。
結(jié)果怎么著,那個(gè)學(xué)弟又問(wèn)我了:“學(xué)長(zhǎng),抽象類和接口有什么區(qū)別呢?”
來(lái),干!
問(wèn)題:
到底什么時(shí)候該用抽象類,什么時(shí)候該用接口呢?



如何區(qū)分使用抽象類和接口
大家在比較抽象類和接口的區(qū)別時(shí),一定要強(qiáng)調(diào)抽象類描述的是事物的本質(zhì),而接口描述的是事物的功能。
比如:保溫杯是水杯,所以水杯應(yīng)該設(shè)計(jì)為抽象類,保溫杯有保溫的功能,所以保溫應(yīng)該設(shè)計(jì)為接口。
可理解為:
class 保溫杯 extends 水杯 implements 保溫
用實(shí)例說(shuō)話
package zmldemo;
//水杯抽象類
public abstract class Cup {
String name;//水杯名稱
String color;//水杯顏色
public Cup() {
}
public Cup(String name, String color) {
this.name = name;
this.color = color;
}
//水杯使用說(shuō)明方法
public abstract void useCup();
}
package zmldemo;
//保溫接口
public interface BaoWen {
//保溫方法
public void baoWen();
}
package zmldemo;
//刷牙杯
public class ShuaYaBei extends Cup {
public ShuaYaBei() {
}
public ShuaYaBei(String name, String color) {
super(name, color);
}
@Override
public void useCup() {
System.out.println("我是"+this.color+"的"+this.name+","+"我是用來(lái)刷牙的");
}
}
package zmldemo;
//保溫杯
public class BaoWenBei extends Cup implements BaoWen{
public BaoWenBei(){
}
public BaoWenBei(String name,String color){
super(name,color);
}
@Override
public void useCup() {
System.out.println("我是"+this.color+"的"+this.name+","+"我是用來(lái)喝水的");
}
@Override
public void baoWen() {
System.out.println("我能對(duì)水杯里的水進(jìn)行保溫");
}
}
package zmldemo;
public class CupTest {
public static void main(String[] args) {
ShuaYaBei shuaYaBei = new ShuaYaBei("刷牙杯","紅色");
shuaYaBei.useCup();
BaoWenBei baoWenBei = new BaoWenBei("保溫杯","金黃色");
baoWenBei.useCup();
baoWenBei.baoWen();
}
}
運(yùn)行結(jié)果:

我想看完這個(gè)例子,抽象類和接口大家應(yīng)該能理解了。

—————END—————
推薦閱讀:
最近面試BAT,整理一份面試資料《Java面試BAT通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?666?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
明天見(??ω??)??
