java - 重載是不是多型? ?
给我你的怀抱
给我你的怀抱 2017-06-12 09:20:06
0
3
1057

這個問題真是個頭痛的問題,怎麼說的都有

觀點一:多型態的三要素,1,2,3
所以重載不是多態

觀點二:

java虛擬機器一書中提到

多態性特徵的一些最基本的體現,如“重載”和“重寫” 8.1節
這話的意思是重載和重寫都是多態的體現

各位怎麼理解

给我你的怀抱
给我你的怀抱

全部回覆(3)
仅有的幸福

每本翻譯得不一樣,最好指明英文術語,是Override還是Overload

Override是多態的體現(例如@Override public String toString() {...}),但Overload不是(例如PrintStream.println()PrintStream.ln(String Strings) )。

给我你的怀抱

其實,中文「重載」對應的英文有三:override, overload 和 overwrite,後來漸漸把最後一個改譯為「重寫」或「改寫」。

override,是指對父類同簽章的函數進行重新定義的一種做法,在這種情況下,父類函數和子類函數都分別獨立的個體。但在呼叫的時候,編譯器(或解釋器)能根據物件的實際型別來判斷要呼叫哪一個實作。

overload 是指對同一個函數名,不能簽署的多種實作。在這種情況下,往往可以使同一個函數名稱對不同類型的參數進行呼叫而產生不同的結果,典型的例子就是 max(int, int)max(double, double) 等。

overwrite 通常是子類別對父類別同簽章函數的改寫,兩個函式簽章一樣,但是毫無關係。這種情況下父類別對子類別物件的引用,呼叫方法是是呼叫的父類別方法(注意與 override 的不同)

關於 overwrite 和 override 的不同,如下圖

現在來說多態。我們先來看看多型態的定義:

  • 多態指同一個實體同時具有多種形式。 (必應網曲)

  • 多態(Polymorphism)按字面的意思就是「多種狀態」。在物件導向語言中,介面的多種不同的實作方式即為多態。 (百度百科)

從定義來看,「重載」與多態無關,但是重載是多態的一種體現形式,其它的還包括介面、抽象、虛函數、模板、泛形…………,再從百度百科引用幾句話:

  • 簡單的說,就是一句話:允許將子類別類型的指標賦值給父類別類型的指標。多態性在Object Pascal和C++中都是透過虛函數來實現的。

  • 多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以透過指向基類的指針,來呼叫實作衍生類別中的方法。

  • C++中,實作多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。

  • 多態就是允許方法重名 參數或回傳值可以是父型別傳入或傳回。

学霸

可能存在翻譯錯誤,多態是指物件在不同情境環境表現出不同的特性,例如一個子類別Child繼承了父類別parent,parent中有一個login方法,Child類別中也新增加了一個方法,save 。也直接使用Child child1=new Child(),child1物件可以呼叫save和login方法,使用Parent child2 = new Child(),child2物件只能使用login方法。所以根據上下文而定。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板