隨筆-11  評論-10  文章-8  trackbacks-0
          關于 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)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 农安县| 罗源县| 开封县| 兰溪市| 城市| 巴林左旗| 韩城市| 武清区| 阜南县| 吉木萨尔县| 汉沽区| 象山县| 普宁市| 田东县| 新疆| 界首市| 江达县| 花莲县| 精河县| 宜宾市| 霍邱县| 海林市| 仁化县| 南漳县| 夏津县| 武胜县| 盐城市| 永清县| 绵竹市| 饶河县| 平凉市| 化州市| 大同县| 巴东县| 扎鲁特旗| 密云县| 巩义市| 海南省| 淳化县| 天津市| 通州市|