java多态 覆盖_Java ------ 继承、方法覆盖、多态
一、什么是繼承
面向對象的三大特性: 封裝、 繼承、多態;
繼承就是子類型將父類型的的屬性繼承到自己類中進行使用,通過繼承的方式子類型可以使用父類型的屬性和方法,并且,繼承只能單重繼承,無法多繼承,但可以間接繼承;
的概念和作用
繼承其實不只是單單只有這些作用,其實它是一種前置條件,只有有了繼承,才有后面的方法覆蓋與多態;
繼承的注意事項: 子類無法繼承父類的私有屬性;
父類型構造方法無法被繼承;
二、什么是方法覆蓋
所謂的方法覆蓋 就是當父類型中的方法無法滿足子類型的時候,通過不修改父類型方法,只在子類型中進行重寫繼承過來的方法,以達到滿足程序要求;
1 public classTest24 {2 public static voidmain(String[] args) {3
4 Dog d = newDog();5 d.move();6 //output result: 狗在跑步7 //d.move() 的運行步驟是 d 引用調用 Dog 中的重寫過后的方法
8 }9 }10
11 class Dog extendsDongWu{12
13 public voidmove(){14 System.out.println("狗在跑步");15 }16 //當對父類型的方法進行重寫時,其子類型中的重寫方法,其 返回值類型,方法名,形參要全部一致相同,如果有不同的地方,將不構成方法的重載
17
18 }19
20 classDongWu{21
22 private voidmove(){23 System.out.println("DongWu 在移動!");24 }25 }
View Code
方法覆蓋的注意事項: 1、進行覆蓋的方法其修飾符級別不能低于父類型的修飾符級別;
2、構造方法無法被覆蓋
3、靜態方法不存在覆蓋
4、覆蓋只針對方法,不針對屬性
5、拋出異常只能比父類型少,不能比父類型多
三、什么是多態
多態是一種通過繼承的方式來達到程序解耦合的結構方式;
在基本數據類型中,有學到過數據類型轉換功能,其實在類與類之間也有類型轉換,當然只有兩個類或多個類有繼承關系的情況下,才有類型轉換,轉換形式有兩種:
—— 子類指向父類: 自動類型轉換,且稱為向上轉型;
—— 父類指向子類: 強制類型轉換,且稱為向下轉型;
1 public classTest23 {2
3 public static voidmain(String[] args) {4
5 Animal a = new Tiger(); //多態6 //子類型指向父類型 ,自動類型轉換,向上轉型
7 a.move();8
9 //Tiger i = (Tiger) a; 語法編譯都正常,但是會出現運行異常:父類型有可能指向錯誤,解決方案
10
11 if(a instanceofTiger) {12 Tiger i = (Tiger) a; //多態13 //父類型指向子類型,強制類型轉換,向下轉型
14 i.move();15 }16 }17 }18
19 classAnimal{20
21 public voidmove() {22
23 }24 }25
26 class Tiger extendsAnimal{27
28 public voidmove() {29 System.out.println("老虎在散步");30 }31 }32
33 class Lion extendsAnimal{34
35 public voidmove() {36 System.out.println("老虎在跑步");37 }38 }
View Code
在該程序中出現了一個新的關鍵字 instanceof? ----------------->?它的作用是測試它左邊的對象是否指向它右邊的類的實例,返回boolean類型的數據;這樣做的好處是判斷兩個類的指向,避免運行異常;
四、為什么使用多態,多態的作用是什么
前面提到多態有解耦合的功能,將它運用在程序當中,可以是程序的耦合度更松散,使程序的可擴展性更強;
1 public classTest22 {2
3 public static voidmain(String[] args) {4
5 Host zhangsan = newHost();6
7 Dog erHa = newDog();8
9 zhangsan.feed(erHa);10 }11
12 }13
14 classHost{15
16 public voidfeed(Pet pet) {17 pet.eat();18 }19 }20
21 classPet{22
23 public voideat() {24
25 }26 }27
28 class Dog extendsPet{29
30 //方法的繼承與覆蓋31 //方法覆蓋: 修飾符不大于,返回值不變,方法名不變,形參不變
32 public voideat() {33 System.out.println("狗吃骨頭");34 }35 }36
37 class Cat extendsPet{38
39 //方法的繼承與覆蓋
40 public voideat() {41 System.out.println("貓吃魚");42 }43 }
多態的功能性
多態的作用就是減少類與類之間的相關聯,在類與類的繼承過程中,提供一個抽象類,并將子類將抽象類作為父類 ,使它成為一個與原父類的接口, 達到剝離原父類的目的;在原父類在調用子類時,可以通過接口進行去調用,并可以達到子類與原父類不相關的目的,提高擴展性。
總結
以上是生活随笔為你收集整理的java多态 覆盖_Java ------ 继承、方法覆盖、多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单核工作法18:简化协作(下)
- 下一篇: java读取文件夹,如何从Java读取文