回覆列表
  • 1 # 加拿大茶小二

    父類指標指向子類物件,就是多型了。

    比如A是父類,B和C都是繼承於A

    B b = new B();

    那A a = b;

    就是多型了。

  • 2 # IT資訊i

    百度搜索圈T社群 免費行業影片教程

    www.aiquanti.com

    多型,就是過載和重寫.過載發生在一個類中.重寫發生在子類,意思就是子類重寫父類相同名稱的方法.剛學語言有的東西,不必搞得那麼清楚,只有知道怎麼用就行了,有的問題你要想真正把它搞得很懂,短時間是不可能的,比如說介面,沒有幾年工作經驗你根本不可能真正理解什麼是介面,甚至有的人工作四,五年也沒搞明白什麼是介面,不要花太多時間去搞這些不容易搞懂的問題.

    過載的特性,方法名相同.返回型別,傳入方法的引數不同(包括個數和型別).

    重寫的特性,方法名相同,返回型別,引數均相同,必須發生在子類.

    1.Java語言允許某個型別的引用變數引用子類的例項,而且可以對這個引用變數進行型別轉換。

    Animal animal=new Dog(); //引用變數animal引用一個Animal子類Dog的例項

    Dog dog=(Dog)animal; //向下轉型,把Animal型別轉換為Dog型別

    Creature creature=animal; //向上轉型,把Animal型別轉換為 Creature型別

    animal=new Cat(); //引用變數animal引用另一個Animal子類Cat的例項

    注:Creature這裡指的是生物。

    2.如果把引用變數轉換為子類型別,稱為向下轉型,如果把引用變數轉換為父類型別,稱為向上轉型。

    3.在進行引用變數的型別轉換時,會受到各種限制。而且在透過引用變數訪問它所引用的例項的靜態屬性、靜態方法、例項屬性、例項方法,以及從父類中繼承的方法和屬性時,Java虛擬機器會採用不同的繫結機制。

    4.成員變數、靜態方法按照引用變數宣告的型別靜態繫結;例項方法按照引用變數引用的例項動態繫結。

    例如,對於以下這段程式碼:

    Fathers f=new Sons();

    System.out.println(“f.var=”+f.var);

    System.out.println(“f.staticVar=”+f.staticVar);

    f.method();

    f.staticMethod();

    執行時將會輸出如下結果:

    f.var=FatherVar

    f.staticVar=StaticFaterVar

    Son method

    Static Father method

    class Fathers{

    String var="FatherVar";

    static String staticVar="StaticFatherVar";

    void method(){System.out.println("Father method");}

    static void staticMethod(){System.out.println("Static Father method");}

    }

    class Sons extends Fathers{

    String var="SonVar";

    static String staticVar="StaticSonVar";

    void method(){System.out.println("Son method");}

    static void staticMethod(){System.out.println("Static Son method");}

    String sonVar=null;

    void sonMethod(){}

    }

  • 3 # hallojava

    多型分為編譯時多型和執行時多型。

    1.編譯時多型,其實就是方法過載,相同函式名,但簽名不相同。值得注意的是簽名不包括方法返回值,換句話說,兩個方法,函式名和入參都相同,但返回值不同,編譯器回報錯的。

    2.執行時多型,其實就和繼承和介面實現相關了,子類可以覆蓋父類的非final,非static,非private方法或者實現介面方法。執行時,動態繫結例項到父類或介面的引用,那jvm是怎麼知道呼叫哪個子類的例項的對應方法的呢?這就是你問的問題了——Java中物件在jvm內部都有描述元資料,物件頭,物件頭中儲存了當前例項的型別資訊,呼叫時jvm就根據這個type能精確找到具體是點用哪個子類的方法了。

  • 中秋節和大豐收的關聯?
  • 初乳很重要嗎?對寶寶有什麼好處?