Java之多態

多態,字面意思就是多種狀態,不同的時期,處於不同的狀態。那java中的多態該怎樣理解呢?
我們都知道,面向對象的三大特徵:封裝,繼承,多態,關於多態,我們下面先來看一段代碼:

class SuperClass{
    public int a = 100;
    public void run(){
        System.out.println("父類 run 方法!");
    }
    public void base(){
        System.out.println("父類 base 方法!");
    }
}
public class SubClass extends SuperClass{
    public int b = 200;
    public void run(){
        System.out.println("子類 run 方法!");
    }
    public void extend(){
        System.out.println("子類 extend 方法!");
    }
    public static void main(String[] argv){
        SuperClass sp = new SuperClass(); // 1
        SubClass sb = new SubClass();     // 2
        SuperClass sc = new SubClass();   // 3
        System.out.println(sc.a); // 4
        System.out.println(sc.b); // 5
    }
}

此段代碼意思很簡單,一共有兩個類,父類SuperClass有一個成員變量a,成員方法base和run。
子類SubClass繼承SuperClass,有成員變量a,b,及成員方法run和extend。
如果我們想調用SuperClass相關內容,則就可以使用1方式,如果想調用SubClass相關內容,一般我們使用的是2這種方法,但是對於3,許多初學者應該是感到有疑問的,而正是這裏,涉及到有關多態方面的東西。
首先,sc被定義成SuperClass的實例類型,則sc在編譯時期,應當是屬於SuperClass類型,但是實際上,我們賦予他的值是SubClass類型的,那麼他在運行時期就屬於SubClass類型。一般情況下,我們應該保證的是一個變量不管是編譯期間,還是運行期間,應該儘可能的保證類型的一致,但是這種不一致,在Java中就被稱爲多態。
既然在編譯期是屬於SuperClass類型,則4處可以編譯通過,但是5處,由於SuperClass不存在b成員變量,因此編譯將無法通過。關於4處打印的值,我們知道,運行時期是SubClass類型,則其運行期間就爲SubClass的實例,那麼其值就爲200。

綜上所述,變量類型在編譯期和運行期類型的不一致,就稱爲多態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章