Java中的多態(tài)用法實(shí)例分析
本文實(shí)例講述了Java中的多態(tài)用法。分享給大家供大家參考。具體分析如下:
多態(tài),是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言最核心的特征。封裝性、繼承性都比較簡(jiǎn)單,所以這里只對(duì)多態(tài)做一個(gè)小小的筆記。。。
1、什么是多態(tài)?
多態(tài)意味著一個(gè)對(duì)象可以多重特征,可以在特定的情況下,表現(xiàn)出不同的狀態(tài),從而應(yīng)對(duì)不同的屬性和方法。在Java中,多態(tài)的實(shí)現(xiàn)指的是使用同一個(gè)實(shí)現(xiàn)接口,以實(shí)現(xiàn)不同的對(duì)象實(shí)例。
例如,我們定義一個(gè)Parent類,再定義一個(gè)getName()方法返回一個(gè)字符串,定義一個(gè)形參為Parent類型的成員方法doSomething(Parent obj),在這個(gè)方法中調(diào)用obj.getName()。然后再定義兩個(gè)類A和B,都從Parent類繼承而來(lái),在子類中重寫getName()方法。最后在main方法中創(chuàng)建一個(gè)Parent類的對(duì)象objP,調(diào)用objP.doSomething()方法并向其傳遞class A,和class B 的引用。觀察輸出結(jié)果。
class Parent { private String name = "parent"; public String getName() { return this.name; } public void doSomething(Parent obj) { //輸出類名 System.out.println(obj.getName()); } public static void main(String[] args) { Parent objP = new Parent(); objP.doSomething(new A()); // 傳遞A的引用,則調(diào)用的是A類的getName方法 objP.doSomething(new B()); // 傳遞B的引用,則調(diào)用的是B類的getName方法 } } class A extends Parent { private String name = "class A"; //@重寫getName()方法 public String getName() { return this.name; } } class B extends Parent { private String name = "class B"; //@重寫getName()方法 public String getName() { return this.name; } }
可見,父類的doSomething方法多態(tài)地調(diào)用了我們傳遞的對(duì)象的getName方法,而不是Parent類本身的getName方法。
2、Java中的接口
Java中的接口,是一系列方法的聲明。一個(gè)接口只有方法的特征,而沒(méi)有方法的實(shí)現(xiàn)。這些方法可以從別處通過(guò)特定的類來(lái)實(shí)現(xiàn)。在Java中,用關(guān)鍵字interface來(lái)聲明一個(gè)接口。
用接口實(shí)現(xiàn)多態(tài)的實(shí)例:
interface Name { //只聲明,不實(shí)現(xiàn) public String getName(); } class A implements Name { private String name = "class A"; //實(shí)現(xiàn)getName方法 public String getName() { return name; } } class B implements Name { private String name = "class B"; //實(shí)現(xiàn)getName方法 public String getName() { return name; } public static void main(String[] args) { Name obj = new A(); System.out.println(obj.getName()); } }
可以看到,打印出了類A的名字class A。
PS:一個(gè)類如果沒(méi)有實(shí)現(xiàn)接口中的所有方法,那么這個(gè)類必須被聲明為abstract(抽象的)。一個(gè)abstract類是不允許實(shí)例化對(duì)象的。
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
java實(shí)現(xiàn)文件上傳、下載、圖片預(yù)覽
這篇文章主要介紹了java實(shí)現(xiàn)文件上傳、下載、圖片預(yù)覽,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Java AES加密解密的簡(jiǎn)單實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Java AES加密解密的簡(jiǎn)單實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Springboot項(xiàng)目中運(yùn)用vue+ElementUI+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖(推薦)
今天給大家?guī)?lái)一篇教程關(guān)于Springboot項(xiàng)目中運(yùn)用vue+ElementUI+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖的技能,包括環(huán)境配置及圓環(huán)圖前端后端實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2021-06-06Java 設(shè)計(jì)模式之責(zé)任鏈模式及異步責(zé)任鏈詳解
顧名思義,責(zé)任鏈模式(Chain of Responsibility Pattern)為請(qǐng)求創(chuàng)建了一個(gè)接收者對(duì)象的鏈。這種模式給予請(qǐng)求的類型,對(duì)請(qǐng)求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式2021-11-11Spring IOC推導(dǎo)與DI構(gòu)造器注入超詳細(xì)講解
這篇文章主要介紹了Spring IOC推導(dǎo)與DI構(gòu)造器注入,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02從ElasticSearch中刪除數(shù)據(jù)的幾種常見方式
這篇文章主要給大家介紹了關(guān)于從ElasticSearch中刪除數(shù)據(jù)的幾種常見方式,在Elasticsearch中刪除數(shù)據(jù)可以通過(guò)刪除索引或刪除文檔兩種方式實(shí)現(xiàn),需要的朋友可以參考下2024-10-10