java多型的理解

2021-09-20 21:49:10 字數 819 閱讀 2777

class

privateoverride

public

static

void

main

(string[

] args)

}class

derived

extends

privateoverride

}public

class

test

}

這個程式的輸出是:private f(),我個人理解的原因如下:

1.父類中的private方法、屬性對於子類是不可見的,因此也就談不上什麼重寫覆蓋這些。在重寫這個概念中,子類不想要父類方法達到的效果或值,就會去修改,或者覆蓋這個方法。如果方法不可見,那子類就不會產生修改父類方法的念頭,所以父類中的private方法也就談不上重寫了。

2.再來看看形成動多型的條件:

1)繼承

2)繼承中必須有方法覆蓋

3)必須由父類的引用指向派生類的例項,並且通過父類的引用呼叫被覆蓋的方法

3.可以發現,我們這個例子中的子類和父類並沒有滿足條件2)。而且原來父類就是通過方法覆蓋知道子類修改了自己的方法,現在子類沒有重寫父類方法,那麼子類其實是相當於寫了乙個f()方法,它只是恰好名字和父類的方法同名一樣而已。現在向上轉型,我們來聯想一下,向上轉型後,父類只有被重寫後的方法內容和原來的不一樣而已,屬性、靜態方法都一樣,也就是說,向上轉型後,我們得到的是乙個非靜態非private方法被修改了,其餘部分都沒變的父類。這個例子中並沒有發生重寫,所以所謂的向上轉型,其實得到的還是乙個原封不動的基類。

Java 多型的理解

物件導向程式設計有三個特徵,即封裝 繼承和多型。封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了資料。繼承是為了重用父類 同時為實現多型性作準備。那麼什麼是多型呢?要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者...

Java多型的理解

要想清楚的理解什麼是多型,就必須要了解 向上轉型 這個概念。下面我們通過乙個例子來介紹向上轉型。public class person protected void sleep public void play public class student extends person public c...

java多型的理解

public string show d obj public string show a obj class b extends a public string show b obj public string show a obj class c extends b class d extend...