日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态

發(fā)布時(shí)間:2025/4/5 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java面向?qū)ο缶幊倘筇卣?- 多態(tài)

本文關(guān)鍵字:Java、面向?qū)ο蟆⑷筇卣鳌⒍鄳B(tài)

多態(tài)是面向?qū)ο缶幊痰娜筇卣髦?#xff0c;是面向?qū)ο笏枷氲慕K極體現(xiàn)之一。在理解多態(tài)之前需要先掌握繼承、重寫、父類引用指向子類對(duì)象的相關(guān)概念,對(duì)繼承還沒(méi)有完全明白的同學(xué)可進(jìn)傳送門: Java面向?qū)ο缶幊倘筇卣?- 繼承 。

一、抽象類

在繼承中,我們已經(jīng)了解了子父類的關(guān)系以及如何對(duì)子父類進(jìn)行設(shè)計(jì),如果已經(jīng)存在多個(gè)實(shí)體類,再去定義父類其實(shí)是不斷的抽取公共重合部分的過(guò)程,如果有需要將會(huì)產(chǎn)生多重繼承關(guān)系。在抽取整理的過(guò)程中,除了屬性可以復(fù)用,有很多方法一樣也可以復(fù)用,假如以圖形舉例:矩形、圓形,都可以具有周長(zhǎng)和面積兩個(gè)方法,但是計(jì)算的方式完全不同,矩形和圓形之間肯定不能構(gòu)成子父類關(guān)系,那么只能是同時(shí)去繼承一個(gè)父類,那么問(wèn)題就來(lái)了,這兩個(gè)類都有什么共同點(diǎn)?

除了都是圖形好像并沒(méi)有什么共同點(diǎn),矩形有兩組邊長(zhǎng),圓形是通過(guò)半徑來(lái)描述,如果非要往一起聯(lián)系的話。。。Wait a moment(靈光一閃中,請(qǐng)勿打擾)!!!難道說(shuō)是都可以計(jì)算出周長(zhǎng)和面積?細(xì)細(xì)想來(lái),也是能說(shuō)出一番道理的,但是這好抽象啊!
如果真的是這樣,也只能有一個(gè)模糊的思路,既然描述圖形的屬性不能夠共用那就分別放在兩個(gè)子類中吧,那么計(jì)算周長(zhǎng)和面積的方法要怎么搞?如果在父類中定義相應(yīng)的方法,那參數(shù)列表怎么寫?方法體怎么填?這個(gè)坑好像有點(diǎn)大,接下來(lái),我們就要華麗地將這個(gè)坑填平。

1. 抽象與抽象類

在上面的例子中,我們遇到了一個(gè)情況,有兩個(gè)在邏輯上看似相關(guān)的類,我們想要把他們聯(lián)系起來(lái),因?yàn)檫@樣做可以提高效率,但是在實(shí)施的過(guò)程中發(fā)現(xiàn)這個(gè)共同點(diǎn)有點(diǎn)太過(guò)模糊,難以用代碼描述,甚至于還不如分開(kāi)用來(lái)的方便,這時(shí)就要引出抽象的概念,對(duì)應(yīng)的關(guān)鍵詞為:abstract。

  • abstract可以修飾方法,修飾后被稱為抽象方法
  • abstract可以修飾類,修飾后被稱為抽象類
  • abstract不能與static修飾符同時(shí)使用

那么使用了abstract又能如何呢?這代表指定的方法和類很難表述,那么。。。就不用表述了!對(duì)于矩形類(Rectangle)與圓形類(Circle)的父類:圖形類(Figure),我們只能總結(jié)出他具有計(jì)算周長(zhǎng)和面積的方法,而具體的實(shí)現(xiàn)方法我們無(wú)法給出,只有明確了圖形之后,才能給出具體的實(shí)現(xiàn),于是我們使用抽象來(lái)描述這兩個(gè)方法, 被abstract修飾的方法不需要有方法體,且不能為private ,由于抽象方法沒(méi)有方法體,那么如果被代碼調(diào)用到了怎么辦呢?以下兩個(gè)限制規(guī)則可以杜絕這個(gè)問(wèn)題:

  • 抽象方法只能存在于抽象類中(接口在另外的文章中討論)
  • 抽象類無(wú)法被直接實(shí)例化(匿名內(nèi)部類的用法暫不做討論)

既然抽象類不能被實(shí)例化,那么自然也就不會(huì)調(diào)用到?jīng)]有方法體的那些方法了,那這些方法該怎么被調(diào)用呢?我們需要一步一步的來(lái)梳理,至少目前我們已經(jīng)能夠清晰的得到如下的關(guān)系圖了:

2. 抽象類的特點(diǎn)

抽象類的本質(zhì)依然是一個(gè)類(class),所以具備著一個(gè)普通類的所有功能,包括構(gòu)造方法等的定義,總結(jié)一下,抽象類具有以下的幾個(gè)特點(diǎn):

  • 抽象類由abstract修飾
  • 抽象類中允許出現(xiàn)抽象方法
  • 抽象類不能通過(guò)構(gòu)造器直接實(shí)例化
  • 可以在抽象類中定義普通方法供子類繼承

現(xiàn)在,我們已經(jīng)可以將抽象父類用代碼描述出來(lái):

// 定義抽象類:圖形類 public abstract class Figure{// 定義計(jì)算周長(zhǎng)的抽象方法:getC()public abstract double getC();// 定義計(jì)算面積的抽象方法:getS()public abstract double getS();// 定義描述圖形的非抽象方法:print()public void print(){System.out.println("這是一個(gè)圖形");} }

3. 天生的父類:抽象類

現(xiàn)在我們已經(jīng)有了一個(gè)抽象類,其中也定義了抽象方法,抽象類不能被直接實(shí)例化保證了抽象方法不會(huì)被直接調(diào)用到。回憶一下我們的出發(fā)點(diǎn),費(fèi)勁巴力的弄出個(gè)抽象類就是為了提取出兩個(gè)類比較抽象的共同點(diǎn),那么下一步自然是繼承了。

  • 抽象類不能直接實(shí)例化,是天生的抽象類
  • 如果一個(gè)類繼承了抽象類,那么必須重寫父類中的抽象方法
  • 如果抽象類中定義了構(gòu)造方法,可以被子類調(diào)用或在實(shí)例化子類對(duì)象時(shí)執(zhí)行
  • 如果抽象類的子類依然是抽象類,可以不重寫抽象方法,將重寫操作留給下一級(jí)子類

二、重寫

重寫指的是子父類之間方法構(gòu)成的關(guān)系,當(dāng)子類繼承父類時(shí),父類中可能已經(jīng)存在了某些方法,那么子類實(shí)例就可以直接進(jìn)行調(diào)用。在有些時(shí)候由于子父類之間的差異,對(duì)于已經(jīng)存在的方法想要做一些修改,這個(gè)時(shí)候我們可以利用重寫, 在子類中定義一個(gè)與父類中的方法完全相同的方法,包括返回值類型和方法簽名(方法名 + 參數(shù)列表) ,此時(shí)就會(huì)構(gòu)成重寫。這樣,子類實(shí)例在調(diào)用方法時(shí)就可以覆蓋父類中的方法,具體的過(guò)程在后半部分闡述。

1. 重寫與重載的區(qū)別

我們?cè)趧傞_(kāi)始接觸方法的時(shí)候了解到了一個(gè)概念:重載,與重寫有些類似,容易混淆,如果知識(shí)點(diǎn)已經(jīng)模糊可以進(jìn)傳送門:Java程序的方法設(shè)計(jì)。總結(jié)一下,重寫和重載有以下區(qū)別:

  • 重載是同一個(gè)類中方法與方法之間的關(guān)系
  • 重寫是子父類間(接口與實(shí)現(xiàn)類間)方法與方法之間的關(guān)系
  • 構(gòu)成重載:方法名相同,參數(shù)列表不同,返回值類型可以不同
  • 構(gòu)成重寫:方法名相同,參數(shù)列表相同,返回值類型相同或?yàn)閷?duì)應(yīng)類型的子類
  • 構(gòu)成重載的方法之間權(quán)限修飾符可以不同
  • 重寫方法的權(quán)限修飾符一定要大于被重寫方法的權(quán)限修飾符

有關(guān)于權(quán)限修飾符的作用如果不明確可以進(jìn)傳送門: Java面向?qū)ο缶幊倘筇卣?- 封裝 。明確了重寫的含義之后,我們終于可以再度提筆,完成我們之前的例子:

// 定義矩形類 public class Rectangle extends Figure{// 定義構(gòu)造器public Rectangle(double height, double width) {this.height = height;this.width = width;}// 定義長(zhǎng)和寬public double height;public double width;// 重寫計(jì)算周長(zhǎng)方法@Overridepublic double getC() {return 2 * (this.height + this.width);}// 重寫計(jì)算面積方法@Overridepublic double getS() {return this.height + this.width;}// 可選覆蓋@Overridepublic void print(){System.out.println("矩形");} } // 定義圓形類 public class Circle extends Figure{// 定義構(gòu)造器public Circle(double radius) {this.radius = radius;}// 定義半徑public double radius;// 重寫計(jì)算周長(zhǎng)方法@Overridepublic double getC() {return 2 * Math.PI * this.radius;}// 重寫計(jì)算面積方法@Overridepublic double getS() {return Math.PI * Math.pow(this.radius, 2);}// 可選覆蓋@Overridepublic void print(){System.out.println("圓形");} }

2. 方法重寫的規(guī)則

  • 重寫的標(biāo)識(shí)為@Override
  • 方法的重寫發(fā)生在子類或者接口的實(shí)現(xiàn)類中
  • 被final聲明的方法不能被重寫
  • 被static聲明的方法不能被重寫,只能聲明同結(jié)構(gòu)的靜態(tài)方法,但是此時(shí)不構(gòu)成重寫
  • 受限于權(quán)限修飾符,子類可能只能重寫部分父類中的方法

3. 父類方法的顯式調(diào)用

從上面的代碼中可以看到,子類繼承父類后,如果存在抽象方法則比如重寫,由于父類中的方法是抽象的,所以無(wú)法調(diào)用。對(duì)于普通的方法,可以選擇性的重寫,一旦重寫我們可以認(rèn)為父類的方法被覆蓋了,其實(shí)這樣的形容是不準(zhǔn)確的,在初學(xué)階段可以認(rèn)為是覆蓋。

比較規(guī)范的說(shuō)法是:通過(guò)子類實(shí)例無(wú)法直接調(diào)用到父類中的同名方法了,但是在內(nèi)存中依然存在著父類方法的結(jié)構(gòu),只不過(guò)訪問(wèn)不到而已。另外,我們同樣可以在子類中顯式的調(diào)用出父類方法,這要用到super關(guān)鍵字。

  • super指代父類對(duì)象
  • super可以調(diào)用可訪問(wèn)的父類成員變量
  • super可以調(diào)用可訪問(wèn)的父類成員方法
  • super可以調(diào)用可訪問(wèn)的父類構(gòu)造方法
  • 不能使用super調(diào)用父類中的抽象方法
  • 可以使用super調(diào)用父類中的靜態(tài)方法

如果我們需要在子類中調(diào)用父類方法或構(gòu)造器,可以將代碼修改如下:

// 定義抽象類:圖形類 public abstract class Figure{// 在抽象類中定義構(gòu)造器,在子類實(shí)例創(chuàng)建時(shí)執(zhí)行public Figure(){System.out.println("Figure init");}// 定義計(jì)算周長(zhǎng)的抽象方法:getC()public abstract double getC();// 定義計(jì)算面積的抽象方法:getS()public abstract double getS();// 定義描述圖形的非抽象方法:print()public void print(){System.out.println("這是一個(gè)圖形");} } // 定義矩形類 public class Rectangle extends Figure{// 定義構(gòu)造器public Rectangle(double height, double width) {super();// 會(huì)調(diào)用默認(rèn)的無(wú)參構(gòu)造,代碼可省略this.height = height;this.width = width;}// 定義長(zhǎng)和寬public double height;public double width;// 重寫計(jì)算周長(zhǎng)方法@Overridepublic double getC() {return 2 * (this.height + this.width);}// 重寫計(jì)算面積方法@Overridepublic double getS() {return this.height + this.width;}// 可選覆蓋@Overridepublic void print(){super.print();// 調(diào)用父類方法System.out.println("矩形");} } // 定義圓形類 public class Circle extends Figure{// 定義構(gòu)造器public Circle(double radius) {super();// 會(huì)調(diào)用默認(rèn)的無(wú)參構(gòu)造,代碼可省略this.radius = radius;}// 定義半徑public double radius;// 重寫計(jì)算周長(zhǎng)方法@Overridepublic double getC() {return 2 * Math.PI * this.radius;}// 重寫計(jì)算面積方法@Overridepublic double getS() {return Math.PI * Math.pow(this.radius, 2);}// 可選覆蓋@Overridepublic void print(){super.print();// 調(diào)用父類方法System.out.println("圓形");} }

三、父類引用指向子類對(duì)象

前面提到的概念消化完畢后,我們看一下子父類對(duì)象實(shí)例化的形式以及方法的執(zhí)行效果。

1. 父類引用指向父類對(duì)象

如果父類是一個(gè)抽象類,則在等號(hào)右側(cè)不能直接使用new加構(gòu)造方法的方式實(shí)例化,如果一定要得到父類實(shí)例,就要使用匿名內(nèi)部類的用法,這里不做討論。

如果父類是一個(gè)普通類,那么我們?cè)诔跏蓟瘯r(shí),等號(hào)左側(cè)為父類型引用,等號(hào)右側(cè)為父類型對(duì)象(實(shí)例),這個(gè)時(shí)候其實(shí)和我們?nèi)?chuàng)建一個(gè)類的對(duì)象并沒(méi)有什么分別,不需要想著他是某某類的父類,因?yàn)?此時(shí)他不會(huì)和任何子類產(chǎn)生關(guān)系,只是一個(gè)默認(rèn)繼承了Object類的普通類 ,正常使用就好,能調(diào)用出的內(nèi)容也都是父類中已定義的。

2. 子類引用指向子類對(duì)象

在進(jìn)行子類實(shí)例化時(shí),由于在子類的定義中繼承了父類,所以在創(chuàng)建子類對(duì)象時(shí),會(huì)先一步創(chuàng)建父類對(duì)象。在進(jìn)行調(diào)用時(shí),根據(jù)權(quán)限修飾符,可以調(diào)用出子類及父類中可訪問(wèn)的屬性和方法。

public class Test{public static void main(String[] args){Rectangle rectangle = new Rectangle(5,10);// 調(diào)用Rectangle中定義的方法,以子類重寫為準(zhǔn)rectangle.print();System.out.println(rectangle.getC());// 得到矩形周長(zhǎng)System.out.println(rectangle.getS());// 得到矩形面積Circle circle = new Circle(5);// 調(diào)用Circle中定義的方法,以子類重寫為準(zhǔn)circle.print();System.out.println(circle.getC());// 得到圓形周長(zhǎng)System.out.println(circle.getS());// 得到圓形面積} }

3. 引用與對(duì)象之間的關(guān)系

在剛開(kāi)始學(xué)習(xí)編程時(shí),我們接觸了基本數(shù)據(jù)類型,可以直接用關(guān)鍵字聲明,定義變量賦值后使用,并不需要使用new關(guān)鍵字。對(duì)于引用與對(duì)象的關(guān)系可以先參考之前的文章回顧一下: Java中的基本操作單元 - 類和對(duì)象 。在這里我們重點(diǎn)要說(shuō)明的是:等號(hào)左側(cè)的引用部分,與等號(hào)右側(cè)的部分在程序運(yùn)行層面有怎樣的關(guān)聯(lián)。

與基本數(shù)據(jù)類型不同,在類中可以定義各種屬性和方法,使用時(shí)也需要先創(chuàng)建對(duì)象。等號(hào)左側(cè)的部分依然是一個(gè)類型的聲明,未賦值時(shí)雖然默認(rèn)情況下是null,但在程序編譯運(yùn)行時(shí),也會(huì)在棧中進(jìn)行存儲(chǔ),記錄了相應(yīng)的結(jié)構(gòu)信息,他所指向的對(duì)象必須是一個(gè)和它 兼容 的類型。

類的聲明引用存放在棧中,實(shí)例化得到的對(duì)象存放在堆中。

  • 在代碼編寫階段,能夠調(diào)用出的內(nèi)容以等號(hào)左側(cè)類型為準(zhǔn)
  • 在程序運(yùn)行階段,具體的的執(zhí)行效果以等號(hào)右側(cè)實(shí)例為準(zhǔn)

下圖為引用與實(shí)例在內(nèi)存中的關(guān)系示意圖,有關(guān)于Java對(duì)象在內(nèi)存中的分布將在另外的文章中說(shuō)明:

4. 父類引用指向子類對(duì)象

了解了引用與對(duì)象的關(guān)系之后,就有了一個(gè)疑問(wèn),如果等號(hào)左側(cè)的聲明類型與等號(hào)右側(cè)的實(shí)例類型不一致會(huì)怎么樣呢?如果我們要保證程序能夠通過(guò)編譯,并且順利執(zhí)行,必須要保證等號(hào)兩邊的類型是兼容的。完全不相關(guān)的兩個(gè)類是不能夠出現(xiàn)在等號(hào)左右兩邊的,即使可以使用強(qiáng)制類型轉(zhuǎn)換通過(guò)編譯,在運(yùn)行時(shí)依然會(huì)拋出異常。

于是我們就聯(lián)想到了子父類是否有可能進(jìn)行兼容呢?會(huì)有兩種情況:子類引用指向父類對(duì)象,父類引用指向子類對(duì)象,下面我們來(lái)一一討論。

  • 子類引用指向父類對(duì)象為什么無(wú)法使用

子類引用指向父類對(duì)象指的是:等號(hào)左側(cè)為子類型的聲明定義,等號(hào)右側(cè)為父類型的實(shí)例。首先,結(jié)論是這種用法是不存在的,我們從兩方面來(lái)分析原因。

第一個(gè)方面,是否符合邏輯?也就是是否會(huì)有某種需求,讓Java語(yǔ)言為開(kāi)發(fā)者提供這樣一種用法?顯然是否定的,我們定義子類的目的就是為了擴(kuò)展父類的功能,結(jié)果現(xiàn)在我們卻在用老舊的、功能貧乏的父類實(shí)例(等號(hào)右側(cè))去滿足已經(jīng)具備了強(qiáng)勁的、功能更為強(qiáng)大的子類聲明(等號(hào)左側(cè))的需要,這顯然是不合理的。

另一方面,在程序運(yùn)行時(shí)是否能夠辦到?如果我們真的寫出了相關(guān)的代碼,會(huì)要求我們添加強(qiáng)制轉(zhuǎn)換的語(yǔ)句,否則無(wú)法通過(guò)編譯,即使通過(guò),在運(yùn)行時(shí)也會(huì)提示無(wú)法進(jìn)行類型轉(zhuǎn)換。這就相當(dāng)于把一個(gè)只能打電話發(fā)短信的老人機(jī)強(qiáng)制轉(zhuǎn)換為能安裝各種APP的智能機(jī),這顯然是辦不到的。

  • 父類引用指向子類對(duì)象有什么樣的意義

父類引用指向子類對(duì)象指的是:等號(hào)左側(cè)為父類型的定義,等號(hào)右側(cè)為子類型的實(shí)例。這種情況是會(huì)被經(jīng)常使用的,類似的還有:接口指向?qū)崿F(xiàn)類。那么,這種用法應(yīng)該如何解釋,又為什么要有這樣的用法呢?

首先,我們先來(lái)理解一下這代表什么含義,假如:父類為圖形,子類為矩形和圓形。這就好比我聲明了一個(gè)圖形對(duì)象,這個(gè)時(shí)候我們知道,可以調(diào)用出圖形類中定義的方法,由于圖形類是一個(gè)抽象類,是不能直接實(shí)例化的,我們只能用他的兩個(gè)子類試試看。

public class Test{public static void main(String[] args){// figure1指向Rectangle實(shí)例Figure figure1 = new Rectangle(5,10);System.out.println(figure1.getC());// 得到矩形周長(zhǎng)System.out.println(figure1.getS());// 得到矩形面積// figure2指向Circle實(shí)例Figure figure2 = new Circle(5);System.out.println(figure2.getC());// 得到圓形周長(zhǎng)System.out.println(figure2.getS());// 得到圓形面積} }

從上面的結(jié)果來(lái)看,這好像和子類引用指向子類對(duì)象的執(zhí)行效果沒(méi)什么區(qū)別呀?但是需要注意此時(shí)使用的是父類的引用,區(qū)別就在于,如果我們?cè)谧宇愔卸x了獨(dú)有的內(nèi)容,是調(diào)用不到的。在上面已經(jīng)解釋了運(yùn)行效果以等號(hào)右側(cè)的實(shí)例為準(zhǔn),所以結(jié)果與直接創(chuàng)建的子類實(shí)例相同并不難理解。

重點(diǎn)要說(shuō)明一下其中的含義:使用Figure(圖形)聲明,代表我現(xiàn)在只知道是一個(gè)圖形,知道能執(zhí)行哪些方法,如果再告知是一個(gè)矩形,那就能算出這個(gè)矩形的周長(zhǎng)和面積;如果是一個(gè)圓形,那就能算出這個(gè)圓形的周長(zhǎng)和面積。我們也可以這樣去描述:這個(gè)圖形是一個(gè)矩形或這個(gè)圖形是一個(gè)圓形。

如果從程序運(yùn)行的角度去解釋,我們已經(jīng)知道,子類對(duì)象在實(shí)例化時(shí)會(huì)先實(shí)例化父類對(duì)象,并且,如果子類重寫了父類的方法,父類的方法將會(huì)隱藏。如果我們用一個(gè)父類引用去指向一個(gè)子類對(duì)象,這就相當(dāng)于對(duì)象實(shí)例很強(qiáng)大,但是我們只能啟用部分的功能,但是有一個(gè)好處就是 相同的指令,不同的子類對(duì)象都能夠執(zhí)行,并且會(huì)存在差異 。這就相當(dāng)于一部老人機(jī),只具備打電話和發(fā)短信的功能,小米手機(jī)和魅族手機(jī)都屬于升級(jí)擴(kuò)展后的智能機(jī),當(dāng)然保有手機(jī)最基本的通訊功能,這樣使用是沒(méi)問(wèn)題的。

四、多態(tài)

學(xué)習(xí)了上面的內(nèi)容后,其實(shí)你已經(jīng)掌握了多態(tài)的用法,現(xiàn)在我們來(lái)明確總結(jié)一下。

1. 什么是多態(tài)

多態(tài)指的是同一個(gè)父類,或同一個(gè)接口,發(fā)出了一個(gè)相同的指令(調(diào)用了同一個(gè)方法),由于具體執(zhí)行的實(shí)例(子類對(duì)象或?qū)崿F(xiàn)類對(duì)象)不同,而有不同的表現(xiàn)形態(tài)(執(zhí)行效果)。

就像上面例子中的圖形一樣,自身是一個(gè)抽象類,其中存在一些抽象方法,具體的執(zhí)行可以由子類對(duì)象來(lái)完成。對(duì)于抽象類的抽象方法,由于子類必須進(jìn)行重寫,所以由子類去執(zhí)行父類的抽象方法必然是多態(tài)的體現(xiàn),對(duì)于其他的情況則未必構(gòu)成多態(tài),因此總結(jié)了以下三個(gè)必要條件。

2. 多態(tài)的必要條件

  • 存在子父類繼承關(guān)系
  • 子類重寫父類的方法
  • 父類引用指向子類對(duì)象

只有滿足了這三個(gè)條件才能構(gòu)成多態(tài),這也就是文章前三點(diǎn)用這么長(zhǎng)的篇幅來(lái)鋪墊的原因。

3. 多態(tài)的優(yōu)點(diǎn)

使用多態(tài)有多種好處,特別是一個(gè)抽象類有多個(gè)子類,或一個(gè)接口存在多個(gè)抽象類時(shí),在進(jìn)行參數(shù)傳遞時(shí)就會(huì)非常的靈活,在方法中只需要定義一個(gè)父類型作為聲明,傳入的參數(shù)可以是父類型本身,也可以是對(duì)應(yīng)的任意子類型對(duì)象。于是,多態(tài)的優(yōu)點(diǎn)可以總結(jié)如下:

  • 降低耦合:只需要與父類型產(chǎn)生關(guān)聯(lián)即可
  • 可維護(hù)性(繼承保證):只需要添加或修改某一子類型即可,不會(huì)影響其他類
  • 可擴(kuò)展性(多態(tài)保證):使用子類,可以對(duì)已有功能進(jìn)行快速擴(kuò)展
  • 靈活性
  • 接口性
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。