日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java多态-如何理解父类引用指向子类对象

發(fā)布時間:2025/7/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java多态-如何理解父类引用指向子类对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java多態(tài),如何理解父類引用指向子類對象

要理解多態(tài)性,首先要知道什么是“向上轉(zhuǎn)型”。

??????? 我定義了一個子類Cat,它繼承了Animal類,那么后者就是前者是父類。我可以通過?? Cat c = new Cat(); 實(shí)例化一個Cat的對象,這個不難理解。

??????? 但當(dāng)我這樣定義時:?? Animal a = new Cat(); 這代表什么意思呢??????

????? 很簡單,它表示我定義了一個Animal類型的引用,指向新建的Cat類型的對象。由于Cat是繼承自它的父類Animal,所以Animal類型的引用是可以指向Cat類型的對象的。

???? 那么這樣做有什么意義呢?因?yàn)樽宇愂菍Ω割惖囊粋€改進(jìn)和擴(kuò)充,所以一般子類在功能上較父類更強(qiáng)大,屬性較父類更獨(dú)特,?? 定義一個父類類型的引用指向一個子類的對象既可以使用子類強(qiáng)大的功能,又可以抽取父類的共性。?

??? 所以,父類類型的引用可以調(diào)用父類中定義的所有屬性和方法,而對于子類中定義而父類中沒有的方法,它是無可奈何的;?? 同時,父類中的一個方法只有在在父類中定義而在子類中沒有重寫的情況下,才可以被父類類型的引用調(diào)用;?? 對于父類中定義的方法,如果子類中重寫了該方法,那么父類類型的引用將會調(diào)用子類中的這個方法,這就是動態(tài)連接。也可以叫做動態(tài)綁定。

???? 動態(tài)綁定是指”在執(zhí)行期間(而非編譯期間)“判斷所引用對象的實(shí)際類型,根據(jù)實(shí)際的類型調(diào)用其相應(yīng)的方法。

??? 看下面這段程序:

class Father {?
??? public void func1() {?
??????? func2();?
??? }

? ? // 這是父類中的func2()方法,因?yàn)橄旅娴淖宇愔兄貙懥嗽摲椒?

? ? //所以在父類類型的引用中調(diào)用時,這個方法將不再有效,取而代之的是將調(diào)用子類中重寫的func2()方法?
??? public void func2() {?
??????? System.out.println("AAA");?
??? }?
}?
class Child extends Father {

? ? // func1(int i)是對func1()方法的一個重載?
?? 由于在父類中沒有定義這個方法,所以它不能被父類類型的引用調(diào)用?
??? 所以在下面的main方法中child.func1(68)是不對的?
??? public void func1(int i) {?
??????? System.out.println("BBB");?
??? } // func2()重寫了父類Father中的func2()方法?? 如果父類類型的引用中調(diào)用了func2()方法,那么必然是子類中重寫的這個方法?
??? public void func2() {?
??????? System.out.println("CCC");?
??? }?
}?
public class PolymorphismTest {?
??? public static void main(String[] args) {?
??????? Father child = new Child();?
??????? child.func1();// 打印結(jié)果將會是什么? } }

???????? 上面的程序是個很典型的多態(tài)的例子。子類Child繼承了父類Father,并重載了父類的func1()方法,重寫了父類的func2()方法。重載后的 func1(int i)和func1()不再是同一個方法,由于父類中沒有func1(int i),那么,父類類型的引用child就不能調(diào)用func1(int? i)方法。而子類重寫了func2()方法,那么父類類型的引用child在調(diào)用該方法時將會調(diào)用子類中重寫的func2()?
??? }?
}

那么該程序?qū)蛴〕鍪裁礃拥慕Y(jié)果呢??????? 很顯然,應(yīng)該是“CCC”。?????

??? 對于多態(tài),可以總結(jié)它為:???????

???? 一、使用父類類型的引用指向子類的對象;

??? 二、該引用只能調(diào)用父類中定義的方法和變量;

??? 三、如果子類中重寫了父類中的一個方法,那么在調(diào)用這個方法的時候,將會調(diào)用子類中的這個方法;(動態(tài)連接、動態(tài)調(diào)用)

??? 四、變量不能被重寫(覆蓋),”重寫“的概念只針對方法,如果在子類中”重寫“了父類中的變量,那么在編譯時會報錯。

多態(tài)的3個必要條件:

??????? 1.繼承?? 2.重寫?? 3.父類引用指向子類對象

轉(zhuǎn)載于:https://www.cnblogs.com/xuyuanjia/p/5411284.html

總結(jié)

以上是生活随笔為你收集整理的Java多态-如何理解父类引用指向子类对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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