多態(tài)Java代碼實現(xiàn) java 多態(tài)

java的多態(tài)怎么實現(xiàn)?

實現(xiàn)多態(tài)的三個條件(前提條件,向上轉(zhuǎn)型、向下轉(zhuǎn)型)

創(chuàng)新互聯(lián)公司是一家專業(yè)提供漢陽企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計制作、成都做網(wǎng)站、HTML5建站、小程序制作等業(yè)務。10年已為漢陽眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。

1、繼承的存在;(繼承是多態(tài)的基礎,沒有繼承就沒有多態(tài))

2、子類重寫父類的方法。(多態(tài)下會調(diào)用子類重寫后的方法)

3、父類引用變量指向子類對象。(涉及子類到父類的類型轉(zhuǎn)換)

向上轉(zhuǎn)型 Student person = new Student()

將一個父類的引用指向一個子類對象,成為向上轉(zhuǎn)型,自動進行類型轉(zhuǎn)換。此時通過父類引用變量調(diào)用的方法是子類覆蓋或繼承父類的方法,而不是父類的方法此時通過父類引用變量無法調(diào)用子類特有的方法。

向下轉(zhuǎn)型 Student stu = (Student)person;

將一個指向子類對象的引用賦給一個子類的引用,成為向下轉(zhuǎn)型,此時必須進行強制類型轉(zhuǎn)換。向下轉(zhuǎn)型必須轉(zhuǎn)換為父類引用指向的真實子類類型,,否則將出現(xiàn)ClassCastException,不是任意的強制轉(zhuǎn)換

向下轉(zhuǎn)型時可以結(jié)合使用instanceof運算符進行強制類型轉(zhuǎn)換,比如出現(xiàn)轉(zhuǎn)換異常---ClassCastException

Java運行時多態(tài)性的實現(xiàn)

運行時多態(tài)性是面向?qū)ο蟪绦蛟O計代碼重用的一個最強大機制 動態(tài)性的概念也可以被說成 一個接口 多個方法 Java實現(xiàn)運行時多態(tài)性的基礎是動態(tài)方法調(diào)度 它是一種在運行時而不是在編譯期調(diào)用重載方法的機制 下面就繼承和接口實現(xiàn)兩方面談談java運行時多態(tài)性的實現(xiàn)

一 通過繼承中超類對象引用變量引用子類對象來實現(xiàn)

舉例說明

//定義超類superA

class superA

{

int i =

void fun()

{

System out println( This is superA )

}

}

//定義superA的子類subB

class subB extends superA

{

int m =

void fun()

{

System out println( This is subB )

}

}

//定義superA的子類subC

class subC extends superA

{

int n =

void fun()

{

System out println( This is subC )

}

}

class Test

{

public static void main(String[] args)

{

superA a

subB b = new subB()

subC c = new subC()

a=b

a fun() ???????? ( )

a=c

a fun() ???????? ( )

}

}

運行結(jié)果為

This is subB

This is subC

上述代碼中subB和subC是超類superA的子類 我們在類Test中聲明了 個引用變量a b c 通過將子類對象引用賦值給超類對象引用變量來實現(xiàn)動態(tài)方法調(diào)用 也許有人會問 為什么( )和( )不輸出 This is superA java 的這種機制遵循一個原則 當超類對象引用變量引用子類對象時 被引用對象的類型而不是引用變量的類型決定了調(diào)用誰的成員方法 但是這個被調(diào)用的方法必須是在超類中定義過的 也就是說被子類覆蓋的方法

所以 不要被上例中( )和( )所迷惑 雖然寫成a fun() 但是由于( )中的a被b賦值 指向了子類subB的一個實例 因而( )所調(diào)用的fun()實際上是子類subB的成員方法fun() 它覆蓋了超類superA的成員方法fun() 同樣( )調(diào)用的是子類subC的成員方法fun()

另外 如果子類繼承的超類是一個抽象類 雖然抽象類不能通過new操作符實例化 但是可以創(chuàng)建抽象類的對象引用指向子類對象 以實現(xiàn)運行時多態(tài)性 具體的實現(xiàn)方法同上例

不過 抽象類的子類必須覆蓋實現(xiàn)超類中的所有的抽象方法 否則子類必須被abstract修飾符修飾 當然也就不能被實例化了

二 通過接口類型變量引用實現(xiàn)接口的類的對象來實現(xiàn)

接口的靈活性就在于 規(guī)定一個類必須做什么 而不管你如何做 我們可以定義一個接口類型的引用變量來引用實現(xiàn)接口的類的實例 當這個引用調(diào)用方法時 它會根據(jù)實際引用的類的實例來判斷具體調(diào)用哪個方法 這和上述的超類對象引用訪問子類對象的機制相似

舉例說明

//定義接口InterA

interface InterA

{

void fun()

}

//實現(xiàn)接口InterA的類B

class B implements InterA

{

public void fun()

{

System out println( This is B )

}

}

//實現(xiàn)接口InterA的類C

class C implements InterA

{

public void fun()

{

System out println( This is C )

}

}

class Test

{

public static void main(String[] args)

{

InterA a

a= new B()

a fun()

a = new C()

a fun()

}

}

輸出結(jié)果為

This is B

This is C

上例中類B和類C是實現(xiàn)接口InterA的兩個類 分別實現(xiàn)了接口的方法fun() 通過將類B和類C的實例賦給接口引用a而實現(xiàn)了方法在運行時的動態(tài)綁定 充分利用了 一個接口 多個方法 展示了Java的動態(tài)多態(tài)性

需要注意的一點是 Java在利用接口變量調(diào)用其實現(xiàn)類的對象的方法時 該方法必須已經(jīng)在接口中被聲明 而且在接口的實現(xiàn)類中該實現(xiàn)方法的類型和參數(shù)必須與接口中所定義的精確匹配

lishixinzhi/Article/program/Java/hx/201311/26085

java里,方法重載是不是多態(tài)的一種實現(xiàn)?

是,什么是多態(tài):

1、面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài)。從一定角度來看,封裝和繼承幾乎都是為多態(tài)而準備的。這是最重要的知識點。

2、多態(tài)的定義:指允許不同類的對象對同一消息做出響應。即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)

3、實現(xiàn)多態(tài)的技術稱為:動態(tài)綁定(dynamicbinding),是指在執(zhí)行期間判斷所引用對象的實際類型,根據(jù)其實際的類型調(diào)用其相應的方法。

4、多態(tài)的作用:消除類型之間的耦合關系。

多態(tài)存在的三個必要條件:

一、要有繼承;

二、要有重寫或重載;

三、父類引用指向子類對象。

java實現(xiàn)多態(tài)的方式:

1、在同一類中多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型,實現(xiàn)重載。

2、在繼承關系中,實現(xiàn)同名函數(shù)的重寫。子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法。

java語言是如何實現(xiàn)多態(tài)的?

你好,很高興回答你的問題。

java的多態(tài)是通過繼承、重寫、重載來實現(xiàn)的。

同一個父類的多個子類,通過各自重寫繼承自父類的方法,實現(xiàn)子類實現(xiàn)父類方法的多態(tài)。

而一個類中,相同的方法名可以通過不同的參數(shù)列表重載來顯示一個類中相同方法名的多態(tài)。

如果有幫助到你,請點擊采納。

我解答的大部分是軟件開發(fā)新人遇到的問題,如果有興趣可以關注我。

名稱欄目:多態(tài)Java代碼實現(xiàn) java 多態(tài)
文章位置:http://muchs.cn/article36/docdipg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、手機網(wǎng)站建設企業(yè)建站、軟件開發(fā)、、網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計