Java面向?qū)ο蟪绦蛟O(shè)計(jì)多態(tài)性示例
本文實(shí)例講述了Java面向?qū)ο蟪绦蛟O(shè)計(jì)多態(tài)性。分享給大家供大家參考,具體如下:
多態(tài):具有表現(xiàn)多種形態(tài)的能力的特征(同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同的操作)
實(shí)現(xiàn)多態(tài)的優(yōu)點(diǎn):為了方便統(tǒng)一調(diào)用!
實(shí)現(xiàn)多態(tài)的三種方式!
1. 子類到父類的轉(zhuǎn)換:
例:
Dog dog=new Dog("歐歐","雪納瑞"); dog.eat(); Pet pet=new Dog("歐歐","雪納瑞");//子類到父類的轉(zhuǎn)換 pet.eat(); pet.catchingFlyDisc();//編譯錯(cuò)誤,父類的引用無(wú)法調(diào)用子類的特殊方法
規(guī)則:
① 將一個(gè)父類的引用指向一個(gè)子類對(duì)象,稱為向上轉(zhuǎn)型,自動(dòng)進(jìn)行類型轉(zhuǎn)換
② 此時(shí)通過父類引用變量調(diào)用的方法是子類覆蓋或繼承父類的方法,不是父類的方法.
③ 此時(shí)通過父類引用變量無(wú)法調(diào)用子類特有的方法!
2. 使用父類作為方法形參實(shí)現(xiàn)多態(tài)
public class Master { private String name = ""; private int money = 0; public Master(String name, int money) { this.name = name; this.money = money; } public void feed(Pet pet) { pet.eat(); } public void feed(Dog dog) { dog.eat(); } public void feed(Penguin pen) { pen.eat(); } } public class Test() { public static void main(String[] args) { Master master = new Master("王先生", 100); Pet pet = new Dog("歐歐", "雪納瑞"); master.feed(pet); } }
3. 使用父類作為方法返回值實(shí)現(xiàn)多態(tài)
public class Master{ private String name = ""; private int money = 0; public Pet getPet(int id) { Pet pet=null; if(id==1) { pet=new Dog("歐歐","雪納瑞") } else if(id==2) { pet=new Penguin("娜娜","帝企鵝"); } return pet; } }
注意:
① 繼承的存在(繼承是多態(tài)的基礎(chǔ),沒有繼承就沒有多態(tài))
② 子類重寫父類的方法
③ 父類引用變量指向子類對(duì)象
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器
這篇文章主要介紹了jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java生成N個(gè)不重復(fù)的隨機(jī)數(shù)的三種方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了三種Java生成N個(gè)不重復(fù)的隨機(jī)數(shù)的方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的可以了解下2023-10-10springboot如何為web層添加統(tǒng)一請(qǐng)求前綴
這篇文章主要介紹了springboot如何為web層添加統(tǒng)一請(qǐng)求前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02MyBatis-plus使用lambda條件構(gòu)造器報(bào)錯(cuò)問題及解決
這篇文章主要介紹了MyBatis-plus使用lambda條件構(gòu)造器報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01spring-boot @Component和@Bean的區(qū)別詳解
這篇文章主要介紹了spring-boot @Component和@Bean的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Hibernate中l(wèi)oad方法與get方法的區(qū)別
Hibernate中有兩個(gè)極為相似的方法get()與load(),他們都可以通過指定的實(shí)體類與ID從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),并返回對(duì)應(yīng)的實(shí)例,但Hibernate不會(huì)搞兩個(gè)完全一樣的方法的2016-01-01SpringSecurity實(shí)現(xiàn)自定義登錄接口的詳細(xì)過程
本文詳細(xì)介紹了如何使用SpringSecurity實(shí)現(xiàn)自定義登錄接口,文章還涉及了對(duì)用戶實(shí)體類的增強(qiáng)以滿足詳細(xì)信息的需求,適合需要深入了解和實(shí)現(xiàn)SpringSecurity自定義登錄功能的開發(fā)者,感興趣的朋友跟隨小編一起看看吧2024-10-10Java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息
大家好,本篇文章主要講的是Java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Java?SpringBoot項(xiàng)目如何優(yōu)雅的實(shí)現(xiàn)操作日志記錄
這篇文章主要介紹了Java?SpringBoot項(xiàng)目如何優(yōu)雅的實(shí)現(xiàn)操作日志記錄,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08