抽象類
- 抽象類不能被實(shí)例化
- 抽象類里包含抽象方法,也可以有非抽象方法蛔垢。
- abstract 不能與final一同修飾一個(gè)類
- abstract 不能與final, static, private, native一同修斯一個(gè)方法
接口
- 接口中定義的成員變量自動(dòng)默認(rèn)為
public static final
,可以直接通過類名.變量名
來調(diào)用 - 接口中的方法自動(dòng)為
public
,因?yàn)榻涌诒仨氁鼙粚?shí)現(xiàn) - 接口中不存在有具體方法體的方法。
- 一個(gè)類要實(shí)現(xiàn)某接口歌懒,必須要實(shí)現(xiàn)這個(gè)接口中所有的方法啦桌。如果只實(shí)現(xiàn)了一部分方法,則這個(gè)類必須要聲明為抽象類。
抽象類 vs 接口
- 語法層次比較
抽象類是個(gè)類甫男,遵循單繼承的原則且改,而一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。 - 設(shè)計(jì)層次理解
- 抽象類理解為
is-a
的關(guān)系板驳,接口理解為like-a
的關(guān)系又跛,實(shí)現(xiàn)的是有沒有某個(gè)行為
的關(guān)系。 - 抽象類是多個(gè)子類向上抽象出來的若治,它們具有相同的特征慨蓝,可以用一個(gè)基類來表示;而接口是行為上的抽象端幼,是多個(gè)類具有相關(guān)的行為礼烈。比如:貓和狗向上可以抽象為動(dòng)物的抽象類,貓和狗都
是一個(gè)
動(dòng)物婆跑,它們有自己玩球的姿勢(shì)此熬。而機(jī)器人也會(huì)玩球(比如發(fā)條魔靈),那么可以統(tǒng)一抽象出一個(gè)接口玩兒個(gè)球
滑进,本質(zhì)上動(dòng)物和機(jī)器人屬于不同的類別犀忱,但它們都有自己玩球的行為。