代碼簡單描述初學(xué)Java語言之多態(tài)初體驗

字號:

本文面向Java初學(xué)者,我們在教材上經(jīng)常會看到Java是多態(tài)的,可是一般的教科書只停留在理論上,很少有實際操作?,F(xiàn)在把多態(tài)個概念用代碼簡單描述一下,由于本人水平有限,所以難免有不足之處。
    首先我們有這樣幾個類,電腦,個人電腦,筆記本電腦。
    public void turnOn(){
    }
    }
    現(xiàn)在有了電腦這個類,那么個人PC,筆記本都是繼承他。
    class PC extends Computer{
    public void turnOn(){
     System.out.println("PC has turn on");
    }
    }
    class NB extends Computer{
    public void turnOn(){
     System.out.println("NB has turn on");
    }
    }
    我們看到,每個類都有一個 turnOn()方法,而在父類中這個方法是空的,子類中各自有不同的實現(xiàn),到這里可能還不太明顯。如果有另外一個方法,要接受這些類作為參數(shù),就像這樣
    class Test{
    public void go(Computer computer){
     computer.turnOn();
    }
    }
    這個方法接收的是基類參數(shù),當(dāng)然我們是可以把子類傳遞給方法的,也應(yīng)該這么做。
    go(new PC());
    go(new NB());
    這樣他就會去調(diào)用具體子類的turnOn()方法,所以這兩次調(diào)用的輸出是不一樣的.如果不用基類作為參數(shù),我們想調(diào)用每個子類的turnOn()方法,那么就要些兩個方法體一樣的go()而接收不同的參數(shù)的重載。
    public void go(PC computer){
     computer.turnOn();
    }
    public void go(NB computer){
     computer.turnOn();
    }
    這樣些也是正確的,但是這樣會產(chǎn)生很多重復(fù)代碼,而且也不易維護,當(dāng)然這只是多態(tài)中最基本的一個部分,Java多態(tài)機制還有很多特性,關(guān)于這些建議大家看看 java編程思想(think in java)這本書,里面講的很詳細,這里只是很簡單的描述了一下。