java多态 覆盖_Java ------ 继承、方法覆盖、多态
一、什么是繼承
面向?qū)ο蟮娜筇匦?#xff1a; 封裝、 繼承、多態(tài);
繼承就是子類型將父類型的的屬性繼承到自己類中進(jìn)行使用,通過(guò)繼承的方式子類型可以使用父類型的屬性和方法,并且,繼承只能單重繼承,無(wú)法多繼承,但可以間接繼承;
的概念和作用
繼承其實(shí)不只是單單只有這些作用,其實(shí)它是一種前置條件,只有有了繼承,才有后面的方法覆蓋與多態(tài);
繼承的注意事項(xiàng): 子類無(wú)法繼承父類的私有屬性;
父類型構(gòu)造方法無(wú)法被繼承;
二、什么是方法覆蓋
所謂的方法覆蓋 就是當(dāng)父類型中的方法無(wú)法滿足子類型的時(shí)候,通過(guò)不修改父類型方法,只在子類型中進(jìn)行重寫繼承過(guò)來(lái)的方法,以達(dá)到滿足程序要求;
1 public classTest24 {2 public static voidmain(String[] args) {3
4 Dog d = newDog();5 d.move();6 //output result: 狗在跑步7 //d.move() 的運(yùn)行步驟是 d 引用調(diào)用 Dog 中的重寫過(guò)后的方法
8 }9 }10
11 class Dog extendsDongWu{12
13 public voidmove(){14 System.out.println("狗在跑步");15 }16 //當(dāng)對(duì)父類型的方法進(jìn)行重寫時(shí),其子類型中的重寫方法,其 返回值類型,方法名,形參要全部一致相同,如果有不同的地方,將不構(gòu)成方法的重載
17
18 }19
20 classDongWu{21
22 private voidmove(){23 System.out.println("DongWu 在移動(dòng)!");24 }25 }
View Code
方法覆蓋的注意事項(xiàng): 1、進(jìn)行覆蓋的方法其修飾符級(jí)別不能低于父類型的修飾符級(jí)別;
2、構(gòu)造方法無(wú)法被覆蓋
3、靜態(tài)方法不存在覆蓋
4、覆蓋只針對(duì)方法,不針對(duì)屬性
5、拋出異常只能比父類型少,不能比父類型多
三、什么是多態(tài)
多態(tài)是一種通過(guò)繼承的方式來(lái)達(dá)到程序解耦合的結(jié)構(gòu)方式;
在基本數(shù)據(jù)類型中,有學(xué)到過(guò)數(shù)據(jù)類型轉(zhuǎn)換功能,其實(shí)在類與類之間也有類型轉(zhuǎn)換,當(dāng)然只有兩個(gè)類或多個(gè)類有繼承關(guān)系的情況下,才有類型轉(zhuǎn)換,轉(zhuǎn)換形式有兩種:
—— 子類指向父類: 自動(dòng)類型轉(zhuǎn)換,且稱為向上轉(zhuǎn)型;
—— 父類指向子類: 強(qiáng)制類型轉(zhuǎn)換,且稱為向下轉(zhuǎn)型;
1 public classTest23 {2
3 public static voidmain(String[] args) {4
5 Animal a = new Tiger(); //多態(tài)6 //子類型指向父類型 ,自動(dòng)類型轉(zhuǎn)換,向上轉(zhuǎn)型
7 a.move();8
9 //Tiger i = (Tiger) a; 語(yǔ)法編譯都正常,但是會(huì)出現(xiàn)運(yùn)行異常:父類型有可能指向錯(cuò)誤,解決方案
10
11 if(a instanceofTiger) {12 Tiger i = (Tiger) a; //多態(tài)13 //父類型指向子類型,強(qiáng)制類型轉(zhuǎn)換,向下轉(zhuǎn)型
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
在該程序中出現(xiàn)了一個(gè)新的關(guān)鍵字 instanceof? ----------------->?它的作用是測(cè)試它左邊的對(duì)象是否指向它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù);這樣做的好處是判斷兩個(gè)類的指向,避免運(yùn)行異常;
四、為什么使用多態(tài),多態(tài)的作用是什么
前面提到多態(tài)有解耦合的功能,將它運(yùn)用在程序當(dāng)中,可以是程序的耦合度更松散,使程序的可擴(kuò)展性更強(qiáng);
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 }
多態(tài)的功能性
多態(tài)的作用就是減少類與類之間的相關(guān)聯(lián),在類與類的繼承過(guò)程中,提供一個(gè)抽象類,并將子類將抽象類作為父類 ,使它成為一個(gè)與原父類的接口, 達(dá)到剝離原父類的目的;在原父類在調(diào)用子類時(shí),可以通過(guò)接口進(jìn)行去調(diào)用,并可以達(dá)到子類與原父類不相關(guān)的目的,提高擴(kuò)展性。
總結(jié)
以上是生活随笔為你收集整理的java多态 覆盖_Java ------ 继承、方法覆盖、多态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 单核工作法18:简化协作(下)
- 下一篇: java美元兑换,(Java实现) 美元