關于 overloading 和 overriding
首先 java 中所有的方法都采用后綁定,就是在運行時綁定(除了被聲明為 final 和 static 的)
java通過方法的 signature 來判斷一個方法與其他方法的關系,是無關的,overload 或 override
方法的 signature 可以肯定的是方法名和參數。返回值,權限修飾詞(public private),final,
static 修飾詞的情況有點復雜后面依次討論。
final && private
被聲明為 final 或 private 的方法都是不能被 override 的,一定要注意這是兩個語義完全不同的詞,
他們除此以外沒有任何聯系。final 不僅不允許子類 override,并且禁止子類使用名字和參數相同但返回
值不同的方法 overload(如例子中的 functionEight()),而 private 不同,他對子類是不可見的
你完全可以在子類中定義一個與父類一摸一樣的方法(這完全合理)。因此說 private 隱含有 final 的
意思并不準確。 private 就是說 It's mine~~~~~~~~~ 對于類以外,沒有人知道它的存在。final
只是說這個方法不想被你覆寫。
返回值
返回值不是方法的 signature,當方法名和參數相同時編譯器會強制要求返回值必須一致,但子類 override
父類的方法返回值可以不同,同樣有一個條件返回值類型之間要有繼承關系!!(例子中的
functionTwo() functionThree() functionFour() 很好的演示這種關系)。要 override,
子類的返回值類型必須是父類的返回值類型的子類(有點拗口,看看 fanctionTwo() functionFour
就會明白了),這也應該是我們想要的行為。
public && private && protected
繼承時方法的權限可以擴大但不能縮小(public > protected > none > private)(例子
functionSix() and functionSeven())
static
你可以覆寫 static 方法,就像 functionFive() 一樣,看起來是 override,但實際上 static
方法始終是前綁定,即在編譯時綁定的。所有永遠不會產生多態的效果,我們還是打消 override
static 方法的念頭吧
posted on 2005-08-24 01:17
JBahamut 閱讀(167)
評論(0) 編輯 收藏