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

姓名: 李小娜

[嵌牛導(dǎo)讀]: ?運行時多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計代碼重用的一個最強(qiáng)大機(jī)制,動態(tài)性的概念也可以被說成“一個接口,多個方法”。Java實現(xiàn)運行時多態(tài)性的基礎(chǔ)是動態(tài)方法調(diào)度,它是一種在運行時而不是在編譯期調(diào)用重載方法的機(jī)制,下面就繼承和接口實現(xiàn)兩方面談?wù)刯ava運行時多態(tài)性的實現(xiàn)。

[嵌牛鼻子]:通過繼承中超類對象引用變量引用子類對象來實現(xiàn)

[嵌牛提問] :如何實現(xiàn)運行時java的多態(tài)性?

[嵌牛正文] : ?一、通過繼承中超類對象引用變量引用子類對象來實現(xiàn)

舉例說明:

//定義超類superA

class superA

{

int i = 100;

void fun()

{

System.out.println(“This is superA”);

}

}

//定義superA的子類subB

class subB extends superA

{

int m = 1;

void fun()

{

System.out.println(“This is subB”);

}

}

//定義superA的子類subC

class subC extends superA

{

int n = 1;

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(); (1)

a=c;

a.fun(); (2)

}

}

運行結(jié)果為:

This is subB

This is subC

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

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

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,249評論 0 62
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,272評論 0 5
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,787評論 11 349
  • 文/一衾 多麗婭瞇著眼蹲在山這頭 用它可愛的頭顱拱了拱我的的下頜 我親了一口他的影子 我簡直愛死了他這副模樣 哦!...
    一衾閱讀 319評論 0 0

友情鏈接更多精彩內(nèi)容