jialisoftw

          java接口和抽象類(lèi)的特殊實(shí)現(xiàn)方法

          一、java中的接口本質(zhì)上是加約束的抽象類(lèi)
          //抽象類(lèi)
          public abstract class AExample
          {
                public abstract int add(int x,int y);
                public abstract int sub(int x,int y); 
          }
          //接口
          public interface IExample
          {
                public int add(int x,int y);
                public int sub(int x,int y); 
          }
             通常的用法是創(chuàng)建一個(gè)新類(lèi),這個(gè)類(lèi)實(shí)現(xiàn)接口或從抽象類(lèi)派生。這個(gè)新類(lèi)要實(shí)現(xiàn)接口中定義的全部方法,或?qū)崿F(xiàn)抽象類(lèi)中的全部抽象方法。
          1、抽象類(lèi)的實(shí)現(xiàn)方法:
          public class MyClass extends AExample
          {
               //其它成員定義:略
               //實(shí)現(xiàn)抽象類(lèi)中的抽象方法
               public int add(int x,int y)
               {
                    return x+y;
                }
                public int sub(int x,int y)
                {
                     return x-y;
                }
                //其它部分:略
          }
          使用方法:
          AExample ae = new MyClass();
          int s = ae.add(4,2);
          int t = ae.sub(4,2);
          2、接口的實(shí)現(xiàn)方法:
          public class MyClass implements IExample
          {
               //其它成員定義:略
               //實(shí)現(xiàn)抽象類(lèi)中的抽象方法
               public int add(int x,int y)
               {
                    return x+y;
               }
               public int sub(int x,int y)
               {
                    return x-y;
               }
               //其它部分:略
          }
          使用方法:
          IExample ae = new MyClass();
          int s = ae.add(4,2);
          int t = ae.sub(4,2);
          可見(jiàn),兩者本質(zhì)是一樣的,使用方法也是非常相似的。
          二、特殊實(shí)現(xiàn)方法
               這里不使用上述從抽象類(lèi)的派生新類(lèi)和用接口實(shí)現(xiàn)的新類(lèi)的方法。
            1、先來(lái)看一下數(shù)組的初始化例子:
                    int[] array;
               這樣定義數(shù)組后,array僅僅是個(gè)引用,array[0],array[1]沒(méi)有實(shí)現(xiàn),即不存在。但是如果在定義時(shí)初始化為:
                    int[] array = new int[]{1,2};
          1和2看成是數(shù)組的兩個(gè)“成員實(shí)例”。這時(shí)array[0],array[1]就被實(shí)現(xiàn)了,也即array被實(shí)現(xiàn)了。
            2、接口和抽象類(lèi)都可以用類(lèi)似的方法實(shí)現(xiàn):
          1. AExample ae = new AExample(){
          2.     public int add(int x,int y)
          3.     {
          4.      return x+y;
          5.     }
          6.     public int sub(int x,int y)
          7.     {
          8.      return x-y;
          9.     }
          10. };
          11. int s = ae.add(4,2);
          12. int t = ae.sub(4,2);
              這里的所謂“成員實(shí)例”就是具體的兩個(gè)方法add和sub的實(shí)現(xiàn)。
          1. IExample ae = new IExample(){
          2.     public int add(int x,int y)
          3.     {
          4.      return x+y;
          5.     }
          6.     public int sub(int x,int y)
          7.     {
          8.      return x-y;
          9.     }
          10. };
          11. int s = ae.add(4,2);
          12. int t = ae.sub(4,2);
          很神奇吧!
          三、總結(jié)
               實(shí)際上這種方法在一般情況下用得比較少,主要應(yīng)用于事件處理問(wèn)題當(dāng)中。并且主要使用接口。
              上面的形式是本人在學(xué)習(xí)java的事件處理編程時(shí)遇到一個(gè)疑問(wèn):為什么java的事件監(jiān)聽(tīng)者注冊(cè)時(shí)使用的形式是這樣的:
          //Person是本人設(shè)計(jì)的一個(gè)含有事件處理的類(lèi),PersonListener是個(gè)接口--監(jiān)聽(tīng)者接口
          Person  p = new Person("Tong",53);
          /////////////////////////////////////////////////////////////////////////////////////////////////////////
          //創(chuàng)建事件監(jiān)聽(tīng)者接口的實(shí)例并注冊(cè)
          p.addPersonListener( new PersonListener(){
                public void OnNameChanged(PersonEventObject e)
                {
                     //自定義事件處理代碼
                     System.out.println("Name   :"+((Person)(e.getSource())).getName());
                }
                public void OnAgeChanged(PersonEventObject e)
               {
                     //自定義事件處理代碼
                     System.out.println("Name   :"+((Person)(e.getSource())).getName());
            
                }
          });
          //////////////////////////////////////////////////////////////////////////////////////////////////
          將上述p.addPersonListener(...)分成兩個(gè)步驟就一清二楚了:
          PersonListener pl = new PersonListener(){
               public void OnNameChanged(PersonEventObject e)
               {
                   //自定義事件處理代碼
                   System.out.println("Name   :"+((Person)(e.getSource())).getName());
               }
               public void OnAgeChanged(PersonEventObject e)
               {
                   //自定義事件處理代碼
                   System.out.println("Name   :"+((Person)(e.getSource())).getName());
               }
          };
          p.addPersonListener(pl);
              看一看,就是我們上面討論的問(wèn)題。
              通過(guò)這個(gè)例子,希望許多初學(xué)java的人會(huì)有所得。
          原文參考自站長(zhǎng)網(wǎng)http://www.software8.co/wzjs/java/2743.html

          posted on 2013-01-22 17:25 飛豬一號(hào) 閱讀(230) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: java接口和抽象類(lèi)的特殊實(shí)現(xiàn)方法 2013-01-25 13:10 免費(fèi)網(wǎng)絡(luò)記事本

          得提前想明白用接口,還是抽象類(lèi)。
          我今天有一個(gè)項(xiàng)目,就發(fā)現(xiàn)這個(gè)問(wèn)題了,得把接口改為抽象類(lèi)。  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 博客| 盖州市| 石楼县| 海口市| 武陟县| 蒙山县| 海门市| 十堰市| 贵阳市| 静海县| 屏南县| 开封县| 郓城县| 崇信县| 达尔| 城固县| 屏东市| 固原市| 隆子县| 万宁市| 兴国县| 奉化市| 宁蒗| 绥江县| 长葛市| 石嘴山市| 绿春县| 阳信县| 绥滨县| 巴塘县| 铜陵市| 工布江达县| 绿春县| 温泉县| 大兴区| 康平县| 桂阳县| 工布江达县| 台安县| 江源县| 通辽市|