工作小驛

          Ninja!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks
          1.JAVA里沒(méi)有多繼承,一個(gè)類只能有一個(gè)父類。而繼承的表現(xiàn)就是多態(tài)。一個(gè)父類可以有多個(gè)子類,而在子類里可以重寫父類的方法(例如方法print()),這樣每個(gè)子類里重寫的代碼不一樣,自然表現(xiàn)形式就不一樣。這樣用父類的變量去引用不同的子類,在調(diào)用這個(gè)相同的方法print()的時(shí)候得到的結(jié)果和表現(xiàn)形式就不一樣了,這就是多態(tài),相同的消息(也就是調(diào)用相同的方法)會(huì)有不同的結(jié)果。舉例說(shuō)明:

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


          運(yùn)行結(jié)果:
          C:\java>java Test
          臭崽子,你站著,不打你我不是你爹!
          為什么打我?我做錯(cuò)什么了!
          我知道錯(cuò)了,別打了!
          我跑,你打不著!

          都調(diào)用了相同的方法,出現(xiàn)了不同的結(jié)果!這就是多態(tài)的表現(xiàn)!

          2.JAVA中沒(méi)有多繼承,而用接口實(shí)現(xiàn)了多繼承!一個(gè)類或是可以同時(shí)實(shí)現(xiàn)多個(gè)接口!(就相當(dāng)于C++里一個(gè)類同時(shí)繼承了多個(gè)類!)例如:

          public class Son implements Father1,Father2,Father3
          {

          }

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

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

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

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

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


          2.用接口實(shí)現(xiàn)增加新的功能。

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

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


          這樣這個(gè)二代子類即有了老的方法,又有新的功能!
          posted on 2007-08-12 22:14 王君 閱讀(262) 評(píng)論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 遂溪县| 邵武市| 方山县| 遂川县| 禹城市| 绿春县| 温泉县| 雅江县| 都江堰市| 工布江达县| 和林格尔县| 邳州市| 河南省| 东台市| 新丰县| 吴川市| 专栏| 浪卡子县| 诸城市| 木兰县| 通道| 广宁县| 岢岚县| 惠水县| 海南省| 柳河县| 志丹县| 瓦房店市| 淮安市| 贵州省| 宣威市| 邢台市| 商河县| 鄄城县| 潜江市| 贵定县| 襄樊市| 北碚区| 九龙坡区| 伊川县| 凤台县|