歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java開發abstract 和 interface的區別

Java開發abstract 和 interface的區別

日期:2017/3/1 9:14:36   编辑:Linux編程

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

Copyright © Linux教程網 All Rights Reserved