丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說(shuō) 明 你 沒(méi) 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1
          數(shù)據(jù)抽象、繼承和多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的三大特性。多態(tài),我覺(jué)得它的作用就是用來(lái)將接口和實(shí)現(xiàn)分離開(kāi),改善代碼的組織結(jié)構(gòu),增強(qiáng)代碼的可讀性。在某些很簡(jiǎn)單的情況下,或許我們不使用多態(tài)也能開(kāi)發(fā)出滿足我們需要的程序,但大多數(shù)情況,如果沒(méi)有多態(tài),就會(huì)覺(jué)得代碼極其難以維護(hù)。
          在Java中,談?wù)摱鄳B(tài)就是在討論方法調(diào)用的綁定,綁定就是將一個(gè)方法調(diào)用同一個(gè)方法主體關(guān)聯(lián)起來(lái)。在C語(yǔ)言中,方法(在C中稱為函數(shù))的綁定是由編譯器來(lái)實(shí)現(xiàn)的,在英文中稱為early binding(前期綁定),因此,大家自然就會(huì)想到相對(duì)應(yīng)的late binding(后期綁定),這在Java中通常叫做run-time binding(運(yùn)行時(shí)綁定),我個(gè)人覺(jué)得這樣稱呼更貼切,運(yùn)行時(shí)綁定的目的就是在代碼運(yùn)行的時(shí)候能夠判斷對(duì)象的類型。通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明:
          /**
           * 定義一個(gè)基類
           */
          public Class Parents {
           public void print() {
            System.out.println(“parents”);
           }
          }
          /**
           * 定義兩個(gè)派生類
           */
          public Class Father extends Parents {
           public void print() {
            System.out.println(“father”);
           }
          }
          public Class Mother extends Parents {
           public void print() {
            System.out.println(“mother”);
           }
          }
          /**
           * 測(cè)試輸出結(jié)果的類
           */
          public Class Test {
           public void find(Parents p) {
            p.print();
           }
           public static void main(String[] args) {
            Test t = new Test();
            Father f = new Father();
            Mother m = new Mother();
            t.find(f);
            t.find(m);
           }
          }
          最后的輸出結(jié)果分別是father和mother,將派生類的引用傳給基類的引用,然后調(diào)用重寫(xiě)方法,基類的引用之所以能夠找到應(yīng)該調(diào)用那個(gè)派生類的方法,就是因?yàn)槌绦蛟谶\(yùn)行時(shí)進(jìn)行了綁定。
          學(xué)過(guò)Java基礎(chǔ)的人都能很容易理解上面的代碼和多態(tài)的原理,但是仍有一些關(guān)鍵的地方需要注意的,算是自己對(duì)多態(tài)的一個(gè)小結(jié):
          1.Java中除了static和final方法外,其他所有的方法都是運(yùn)行時(shí)綁定的。在我另外一篇文章中說(shuō)到private方法都被隱式指定為final的,因此final的方法不會(huì)在運(yùn)行時(shí)綁定。當(dāng)在派生類中重寫(xiě)基類中static、final、或private方法時(shí),實(shí)質(zhì)上是創(chuàng)建了一個(gè)新的方法
          2.在派生類中,對(duì)于基類中的private方法,最好采用不同的名字。
          3.包含抽象方法的類叫做抽象類。注意定義里面包含這樣的意思,只要類中包含一個(gè)抽象方法,該類就是抽象類。抽象類在派生中就是作為基類的角色,為不同的子類提供通用的接口。
          4.對(duì)象清理的順序和創(chuàng)建的順序相反,當(dāng)然前提是自己想手動(dòng)清理對(duì)象,因?yàn)榇蠹叶贾繨ava垃圾回收器。
          5.在基類的構(gòu)造方法中小心調(diào)用基類中被重寫(xiě)的方法,這里涉及到對(duì)象初始化順序。
          6.構(gòu)造方法是被隱式聲明為static方法。
          7.用繼承表達(dá)行為間的差異,用字段表達(dá)狀態(tài)上的變化。
          posted on 2007-11-09 09:19 Crying 閱讀(381) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)
          主站蜘蛛池模板: 日照市| 白沙| 田阳县| 许昌市| 乐山市| 电白县| 武清区| 龙江县| 四川省| 嘉荫县| 伊金霍洛旗| 七台河市| 茂名市| 海门市| 策勒县| 马鞍山市| 子长县| 堆龙德庆县| 休宁县| 伽师县| 县级市| 嘉黎县| 弥渡县| 遂川县| 关岭| 剑河县| 绥中县| 朔州市| 遵化市| 新丰县| 界首市| 德昌县| 湟源县| 长汀县| 佛山市| 禹州市| 无为县| 南召县| 莱西市| 合江县| 乃东县|