<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
    數(shù)據(jù)加載中……

    多態(tài)學(xué)習(xí)心得

    作者:Flyingis

        這幾天我在重新復(fù)習(xí)
    Java語言基礎(chǔ),雖然和團(tuán)隊一起,自己個人都進(jìn)行了實際項目的開發(fā),但越往上面走越覺得自己應(yīng)該花點(diǎn)時間看看Java的基礎(chǔ)知識,鞏固一下基礎(chǔ)。今天復(fù)習(xí)的是多態(tài),同時寫下自己的學(xué)習(xí)心得。

    數(shù)據(jù)抽象、繼承和多態(tài)是面向?qū)ο蟪绦蛟O(shè)計語言的三大特性。多態(tài),我覺得它的作用就是用來將接口和實現(xiàn)分離開,改善代碼的組織結(jié)構(gòu),增強(qiáng)代碼的可讀性。在某些很簡單的情況下,或許我們不使用多態(tài)也能開發(fā)出滿足我們需要的程序,但大多數(shù)情況,如果沒有多態(tài),就會覺得代碼極其難以維護(hù)。

    Java中,談?wù)摱鄳B(tài)就是在討論方法調(diào)用的綁定,綁定就是將一個方法調(diào)用同一個方法主體關(guān)聯(lián)起來。在C語言中,方法(C中稱為函數(shù))的綁定是由編譯器來實現(xiàn)的,在英文中稱為early binding(前期綁定),因此,大家自然就會想到相對應(yīng)的late binding(后期綁定),這在Java中通常叫做run-time binding(運(yùn)行時綁定),我個人覺得這樣稱呼更貼切,運(yùn)行時綁定的目的就是在代碼運(yùn)行的時候能夠判斷對象的類型。通過一個簡單的例子說明:

    /**

     * 定義一個基類

     */

    public Class Parents {

      public void print() {

        System.out.println(“parents”);

    }

    }

    /**

     * 定義兩個派生類

     */

    public Class Father extends Parents {

      public void print() {

        System.out.println(“father”);

    }

    }

    public Class Mother extends Parents {

      public void print() {

        System.out.println(“mother”);

    }

    }

    /**

     * 測試輸出結(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é)果分別是fathermother,將派生類的引用傳給基類的引用,然后調(diào)用重寫方法,基類的引用之所以能夠找到應(yīng)該調(diào)用那個派生類的方法,就是因為程序在運(yùn)行時進(jìn)行了綁定。

    學(xué)過Java基礎(chǔ)的人都能很容易理解上面的代碼和多態(tài)的原理,但是仍有一些關(guān)鍵的地方需要注意的,算是自己對多態(tài)的一個小結(jié):

    1.        Java中除了staticfinal方法外,其他所有的方法都是運(yùn)行時綁定的。在我另外一篇文章中說到private方法都被隱式指定為final的,因此final的方法不會在運(yùn)行時綁定。當(dāng)在派生類中重寫基類中staticfinal、或private方法時,實質(zhì)上是創(chuàng)建了一個新的方法。

    2.        在派生類中,對于基類中的private方法,最好采用不同的名字。

    3.        包含抽象方法的類叫做抽象類。注意定義里面包含這樣的意思,只要類中包含一個抽象方法,該類就是抽象類。抽象類在派生中就是作為基類的角色,為不同的子類提供通用的接口。

    4.        對象清理的順序和創(chuàng)建的順序相反,當(dāng)然前提是自己想手動清理對象,因為大家都知道Java垃圾回收器。

    5.        在基類的構(gòu)造方法中小心調(diào)用基類中被重寫的方法,這里涉及到對象初始化順序。

    6.        構(gòu)造方法是被隱式聲明為static方法。

    7.        用繼承表達(dá)行為間的差異,用字段表達(dá)狀態(tài)上的變化。

    posted on 2005-10-31 19:28 Flyingis 閱讀(1183) 評論(1)  編輯  收藏 所屬分類: JavaSE

    評論

    # re: 多態(tài)學(xué)習(xí)心得  回復(fù)  更多評論   

    怎么 跟Think in java說的一模一樣 沒有新意!
    類實例的引用就是指向一個句柄(handle)的指針,而該句柄(handle)其實是一對指針:其中一個指針指向一張表,該表格包含了對象的方法列表以及一個指向類對象(表示對象類型)的指針;另一個指針指向一塊內(nèi)存地址,該內(nèi)存是從java堆中為對象的數(shù)據(jù)而分配出來的。
    這是最基礎(chǔ)的.你還要想想為什么JAVA中可以動態(tài)綁定以什么樣的機(jī)制保證的.
    2006-10-24 21:35 | java[匿名]
    主站蜘蛛池模板: 精品国产免费人成电影在线观看| 亚洲欧美国产欧美色欲| sihu国产精品永久免费| 免费精品一区二区三区在线观看| 亚洲欧洲日产国码在线观看| 免费A级毛片无码专区| 色婷婷亚洲十月十月色天| 日本免费一区二区三区| 亚洲熟妇av一区二区三区下载| 嘿嘿嘿视频免费网站在线观看| 亚洲一区精品视频在线| 成人毛片18女人毛片免费视频未 | 日韩免费高清一级毛片在线| 亚洲一区AV无码少妇电影| 啦啦啦手机完整免费高清观看| 亚洲av无一区二区三区| 亚洲精品国产高清不卡在线| 男男gay做爽爽的视频免费| 免费a级毛片网站| 一级午夜a毛片免费视频| 亚洲国产精品乱码一区二区| 日韩内射激情视频在线播放免费 | fc2成年免费共享视频网站| 国产精品亚洲不卡一区二区三区 | 亚洲黄色一级毛片| 在线观看特色大片免费视频 | 久久亚洲精品无码网站| 亚洲人成人无码网www国产| 午夜精品一区二区三区免费视频| 亚洲一区二区三区国产精品无码| 日韩精品视频免费在线观看| 国产成人亚洲精品电影| 亚洲AV永久无码精品| 毛片a级毛片免费播放下载| 91av免费在线视频| 亚洲综合色一区二区三区小说| 成人免费无码精品国产电影| 最近更新免费中文字幕大全| 精品亚洲国产成人| 久久亚洲国产成人影院网站| 国产92成人精品视频免费|