Java開發裡面經常會用到虛函數和接口,這兩者的區別是什麼呢?
abstract: 子類裡面只能繼承一個父類
interface: 子類可以實現多個接口
那什麼時候用abstract,什麼時候用interface呢?
當某個子類和父類是 is a
關系時,比如一個亞洲人是一個人,那麼一個亞洲人的子類可以繼承一個人的父類。
當子類和父類是like a
關系時,比如一個美洲超人像一個超人,超人的能力不是每個人都有的,所以不是所有人的屬性,我們不能把超能力歸於人的父類,這時就可以用interface
代碼例子:
public abstract class Man {
public abstract void eat();
}
public interface SuperPower {
public void superPower();
}
public class AsiaMan extends Man {
@Override
public void eat() {
System.out.println("亞洲人用筷子吃");
}
}
public class AmericanSuperMan extends Man implements SuperPower {
public void superPower() {
System.out.println("美國超人會飛");
}
@Override
public void eat() {
System.out.println("美國人用刀叉吃");
}
}
public static void main(String[] args) {
Man anAsiaMan = new AsiaMan();
AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
anAsiaMan.eat();
anAmericanSuperMan.eat();
anAmericanSuperMan.superPower();
}
運行結果:美國人用刀叉吃
美國超人會飛
亞洲人用筷子吃
正確的使用abstract和interface有利提高代碼可讀性,當人們看到extend時就會知道這是一個is a
什麼,看到implement時可以知道這個類有什麼特性like a