天天看點

今天和大家來說說下多态

首先引入一個問題,什麼是多态,所謂的 多态從字面意思的了解就是多種狀态.多态在我們的生活裡面是到處存在的。

比如比如一個很簡單的比方,就拿休息的方法來說,普通的人休息就是睡一覺,程式員休息就是ixie幾行代碼。等等

或出現不同的形式。多要就像一個函數,當輸入不同的參數,會得到不同的結果。下面我們來看看代碼來了解下什麼是多态

package TestModefine;

/**
 * @author hackbase  多态的測試必須滿足三個條件
 * 1.必須要又繼承
 * 2.必須重寫父類的方法
 * 3.父類的引用必須指向子類的對象
 * 下面我們來看看代碼.
 */
public class Demo {
    public static void main(String[] args) {
        //一般動物交了一聲
        Animal d=new Animal();
        AnimalShutCry(d);
        //當我們傳遞一個狗進去的時候,就會出現狗叫
        Animal d2=new Dog();
        AnimalShutCry(d2);
        //當我們傳遞一個貓進去的時候,會自動的出現貓叫的現象/
        Animal d3=new Cat();
        //自動向上轉型。
        AnimalShutCry(d3);

        //向下轉型.
        Dog b=(Dog)d2;
        //強制向下轉型.




    }
     static   void AnimalShutCry(Animal T){
        T.shut();
    }

    static class Animal{
        public void shut(){
            System.out.println("叫了一聲");
        }
    }

    static class Dog extends Animal{
        @Override
        public void shut(){
            System.out.println("汪汪汪的叫了一聲.......");
        }
    }

    static class Cat extends Animal{
        @Override
        public void shut() {
            System.out.println("喵喵的叫了一聲......");
        }
    }
}
           

上面的代碼說的很i清楚,多态必須滿足三個條件1.又繼承的關系。2.重寫了父類的方法。3.父類的引用必須指向子類的一個對象.

着三個條件卻不可.  主要看看下面的代碼.

static   void AnimalShutCry(Animal T){
        T.shut();
    }
           

上面代碼才是多态的關鍵,在方法的參數裡面,我們定義了一個父類的引用,當我們傳入不同的子類的時候JVM會根據不同的子類調用不同的方法。來看看代碼輸出的的結果。

public static void main(String[] args) {
        //一般動物交了一聲
        Animal d=new Animal();
        AnimalShutCry(d);
        //當我們傳遞一個狗進去的時候,就會出現狗叫
        Animal d2=new Dog();
        AnimalShutCry(d2);
        //當我們傳遞一個貓進去的時候,會自動的出現貓叫的現象/
        Animal d3=new Cat();
        //自動向上轉型。
        AnimalShutCry(d3);

        //向下轉型.
        Dog b=(Dog)d2;
        //強制向下轉型.




    }
           

當我們傳遞不同的動物進去的時候,JVM就會調用不同的方法,進而輸出不同的結果。着就是多态

繼續閱讀