302班

          java突擊隊
          posts - 151, comments - 74, trackbacks - 0, articles - 14
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java中的繼承與多態

          Posted on 2007-06-15 13:56 停留的風 閱讀(2170) 評論(0)  編輯  收藏 所屬分類: 快速前進的Java美文轉載

          1.JAVA里沒有多繼承,一個類之能有一個父類。

          而繼承的表現就是多態。一個父類可以有多個子類,而在子類里可以重寫父類的方法(例如方法print()),這樣每個子類里重寫的代碼不一樣,自然表現形式就不一樣。這樣用父類的變量去引用不同的子類,在調用這個相同的方法print()的時候得到的結果和表現形式就不一樣了,這就是多態,相同的消息(也就是調用相同的方法)會有不同的結果。舉例說明:

          //父類
                      public class Father{
                      //父類有一個打孩子方法
                      public void hitChild(){}
                      }
                      //子類1
                      public class Son1 extends Father{
                      //重寫父類打孩子方法
                      public void hitChild(){
                      System.out.println("為什么打我?我做錯什么了!"); }
                      }
                      //子類2
                      public class Son2 extends Father{
                      //重寫父類打孩子方法 public void hitChild(){
                      System.out.println("我知道錯了,別打了!"); }
                      }
                      //子類3
                      public class Son3 extends Father{
                      //重寫父類打孩子方法 public void hitChild(){
                      System.out.println("我跑,你打不著!"); }
                      }
                      //測試類
                      public class Test{
                      public static void main(String args[]){
                      Father father;
                      father = new Son1();
                      father.hitChild();
                      father = new Son2();
                      father.hitChild();
                      father = new Son3();
                      father.hitChild();
                      }
                      }

          都調用了相同的方法,出現了不同的結果!這就是多態的表現!

          2.JAVA中沒有多繼承,而用接口實現了多繼承!一個類或是可以同時實現多個接口!(就相當于C++里一個類同時繼承了多個類!)例如:

          public class Son implements Father1,Father2,Father3{
                      }

          接口有利于代碼功能的擴展(增加新的功能)!而繼承則有利于代碼功能的修改(把舊的功能改成新的功能)!這里舊功能的修改和新功能的增加前提是不修改舊的功能,舊的功能仍然可以使用!舊類的代碼也不做修改!

          接著上面的繼承舉例:上面例子中的子類我們統稱為一代子類

          1.用繼承修改舊的功能。

          現在如果一代Son1的功能打孩子,也就是方法hitChild()里邊的功能實現有問題,我們要把具體實現修改掉,那么我們可以重新寫一個新的二代子類Son11繼承自一代子類Son1,并重寫其hitChild()方法。

          //二代子類
                      public class Son11 extends Son1{
                      //重寫父類打孩子方法
                      public void hitChild(){ System.out.println("我是二代子類對此方法的新實現");
                      }
                      }

          2.用接口實現增加新的功能。

          現在類Son1已經有了‘打孩子’功能(也就是方法),而我們有了新的需求,我們需要它還要有一個新的功能‘寵孩子’(新方法pet();)。而舊的代碼不能動!那么我們可以定義一個新的接口(PetInterFace),接口里定義這個方法pet()的聲明。再重新寫一個二代子類Son11,讓它先繼承類Son1,同時實現接口 PetInterFace!并實現接口里的 pet()方法!

          //新接口
                      public interface PetInterFace{
                      //新功能方法 public void pet();
                      }
                      //二代子類
                      public class Son11 extends Son1 implements PetInterFace{
                      //實現接口方法
                      public void pet(){
                      System.out.println("父親很愛我!");
                      }
                      }

          這樣這個二代子類即有了老的方法,又有新的功能!
          /////////////////////////////////////////////////////////////////////////////////////////////////////////////
          多態的解釋
          “polymorphism(多態)”一詞來自希臘語,意為“多種形式”。多數Java程序員把多態看作對象的一種能力,使其能調用正確的方法版本。盡管如此,這種面向實現的觀點導致了多態的神奇功能,勝于僅僅把多態看成純粹的概念。

            Java中的多態總是子類型的多態。幾乎是機械式產生了一些多態的行為,使我們不去考慮其中涉及的類型問題。本文研究了一種面向類型的對象觀點,分析了如何將對象能夠表現的行為和對象即將表現的行為分離開來。拋開Java中的多態都是來自繼承的概念,我們仍然可以感到,Java中的接口是一組沒有公共代碼的對象共享實現。

            多態的分類

            多態在面向對象語言中是個很普遍的概念.雖然我們經常把多態混為一談,但實際上有四種不同類型的多態。在開始正式的子類型多態的細節討論前,然我們先來看看普通面向對象中的多態。

            Luca Cardelli和Peter Wegner("On Understanding Types, Data Abstraction, and Polymorphism"一文的作者, 文章參考資源鏈接)把多態分為兩大類----特定的和通用的----四小類:強制的,重載的,參數的和包含的。他們的結構如下:



            在這樣一個體系中,多態表現出多種形式的能力。通用多態引用有相同結構類型的大量對象,他們有著共同的特征。特定的多態涉及的是小部分沒有相同特征的對象。四種多態可做以下描述:

            強制的:一種隱式做類型轉換的方法。

            重載的:將一個標志符用作多個意義。

            參數的:為不同類型的參數提供相同的操作。

            包含的:類包含關系的抽象操作。

            我將在講述子類型多態前簡單介紹一下這幾種多態。

          主站蜘蛛池模板: 瓦房店市| 庄河市| 瑞金市| 邵东县| 融水| 鹿邑县| 乳山市| 丰镇市| 华宁县| 恭城| 瑞安市| 横山县| 江川县| 陕西省| 兴义市| 志丹县| 皋兰县| 武定县| 河源市| 辉县市| 胶南市| 新泰市| 吕梁市| 城步| 册亨县| 临江市| 张北县| 竹溪县| 南京市| 榆中县| 阜宁县| 兴业县| 定兴县| 罗山县| 广安市| 永寿县| 中宁县| 天祝| 梅河口市| 信丰县| 通化县|