3.JAVA中的多型
阿新 • • 發佈:2019-02-03
方法的重寫規則
- 引數列表必須完全與被重寫方法的相同;
- 返回型別必須完全與被重寫方法的返回型別相同;
- 訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如:如果父類的一個方法被宣告為public,那麼在子類中重寫該方法就不能宣告為protected。
- 父類的成員方法只能被它的子類重寫。
- 宣告為final的方法不能被重寫。
- 宣告為static的方法不能被重寫,但是能夠被再次宣告。
- 子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了宣告為private和final的方法。
- 子類和父類不在同一個包中,那麼子類只能夠重寫父類的宣告為public和protected的非final方法。
- 重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方法宣告的更廣泛的強制性異常,反之則可以。
- 構造方法不能被重寫。
- 如果不能繼承一個方法,則不能重寫這個方法。
多型
多型的優點
- 1. 消除型別之間的耦合關係
- 2. 可替換性
- 3. 可擴充性
- 4. 介面性
- 5. 靈活性
- 6. 簡化性
多型存在的三個必要條件
- 繼承
- 重寫
- 父類引用指向子類物件
使用多型呼叫方法的時候先去父類中查詢是否有這個方法。沒有的話就報錯,因為父類都沒有,也就無法繼承,何談重寫?
如果有,再去呼叫子類的同名方法。
多型的好處:可以使程式有良好的擴充套件,並可以對所有類的物件進行通用處理
要想呼叫父類中被重寫的方法,則必須使用關鍵字super。
多型的實現方式
方式一:重寫:
方式二:介面(implements 變相實現多繼承)
-
1. 生活中的介面最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規定的介面規則,有可能到國外就不行,那是因為國外自己定義的介面型別。
-
2. java中的介面類似於生活中的介面,就是一些方法特徵的集合,但沒有方法的實現。具體可以看 java介面 這一章節的內容。
方式三:抽象類和抽象方法
abstract
如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定
Abstract關鍵字同樣可以用來宣告抽象方法,抽象方法只包含一個方法名,而沒有方法體。
抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。
在Java中抽象類表示的是一種繼承關係,一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
宣告抽象方法會造成以下兩個結果:
- 如果一個類包含抽象方法,那麼該類必須是抽象類。
- 任何子類必須重寫父類的抽象方法,或者宣告自身為抽象類。
抽象類總結規定
-
1. 抽象類不能被例項化(初學者很容易犯的錯),如果被例項化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以建立物件。
-
2. 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
-
3. 抽象類中的抽象方法只是宣告,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。
-
4. 構造方法,類方法(用static修飾的方法)不能宣告為抽象方法。
-
5. 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。