1. 程式人生 > 其它 >java繼承之四(多型)

java繼承之四(多型)

多型:實現動態編譯,也就程式碼的型別只有在執行的時候才能確定,在寫程式碼階段確定不了,這樣可以讓程式碼的可擴充套件性更強。

  同一方法,可以根據傳送物件的不同而採用多種不同的行為方式

  一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多

多型的存在條件:

    有繼承關係

    子類重寫父類方法

    父類引用指向子類物件

注:屬性沒有多型

public class Main {
    public static void main(String[] args) {
       //一個物件的實際型別是確定的,如:
       //new Studed
       //new Person
       
       
//但是可以指向的引用型別就不確定了 ,父類的引用指向子類 //下面的實際型別是Studed(),這是確定的,但是他的引用型別可以指向他任意父的類 //Studed:能呼叫的方法都是自己的或者繼承父類的 Studed s1=new Studed(); //Person:父型別,可以指向子類,不能呼叫子類獨有的方法 Person s2=new Studed(); Object s3=new Studed(); //正常情況下我們要呼叫父類的方法要使用s2的方式去呼叫 s2.run();//
子類不重定父類方法時,這個s2呼叫的時父類的方法,但是當我們子類重寫父類的方法時,他們呼叫的是子類的方法 s1.run();//呼叫子類的run方法 //總結:當我們父類(Person)和子類(Studed)有一樣的方法時,s2呼叫的時子類的,當我們父類(Person)有的方法子類沒有時,那s2呼叫的是父類的方法 //而當子類有的方法父類沒有時,s2是不能去呼叫的,所以物件能執行那些方法,主要看左邊有那些類,和右邊的物件型別關係不大 //如:Person s2=new Studed();這個物件,我們即可以呼叫 父類中的方法也可呼叫子類中的方法,只不過當子類有重寫父類方法中,s2呼叫的就變成了的方法了
} } //子類 class Studed extends Person{ public void run(){//重寫父類方法 System.out.println("run()1"); } public void shoe(){ System.out.println("shoe()"); } } //父類 class Person { public void run(){ System.out.println("run()"); } }

多型的注意事項:

    1.多型是方法的多型,屬性沒有多型。

    2.父類和子類,有聯絡 型別轉換異常 ClassCastException!

    3.存在的條件:存在繼承關係,方法要重寫,父類引用指向子類物件,詳解:當我們父類(Person)和子類(Studed)有一樣的方法時,s2呼叫的時子類的,當我們父類(Person)有的方法子類沒有時,那s2呼叫的是父類的方法,而當子類有的方法父類沒有時,s2是不能去呼叫的,所以物件能執行那些方法,主要看左邊有那些類,和右邊的物件型別關係不大,如:Person s2=new Studed();這個物件,我們即可以呼叫 父類中的方法也可呼叫子類中的方法,只不過當子類有重寫父類方法中,s2呼叫的就變成了的方法了

      3.1:不能重寫的方法:static :屬於類的,不屬於例項

       3.2:finol :常量,不可改變的

        3.3:private方法:這三種修飾符修改的方法是不能被重寫的,所以也就不能實現多型。

 


 

多型:
理解多型性:可以理解為一個事物的多種形態

 

 

 

 

何為多型性:物件的金礦性:父類的引用指向子類的物件(或子類的物件賦給父類的引用)。


多型的使用:當呼叫子父類同名同參數的方法時,實際執行的是子類重寫父類的方法------虛擬方法呼叫

 

 

物件的多型性只適用於方法,不適用於屬性,屬性是不存在多型性(編譯和執行都看左邊),而方法的時候是(編譯看左邊執行看右邊)

 

 

個人理解:多型就是先建立一個父類和一個或多個子類,子類繼承父類並重寫父類方法,然後在測試類中建立父類的形參方法,並呼叫父類中的需要輸出的方法,並在測試類的main方法中呼叫,就可以呼叫任意子類
注:在使用多型的時候,子類繼承了父類,但沒有重寫父類的方法,他只能呼叫用父類方法:比如:你的父類定義了一htip()的方法,但子類沒有重寫htip()這個方法,在測試類中呼叫htip()方法,他只能呼叫用父類中的htip(),但果子類重寫了htip()的方法測試類中就會呼叫子類重寫的方法

 

 

 

 如果沒有多型,上面的例子就要造很多過載的方法