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

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

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

    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) 閱讀(227) 評(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)論排行榜

    主站蜘蛛池模板: 最新国产乱人伦偷精品免费网站 | 99免费精品视频| 特级毛片A级毛片免费播放| 亚洲另类无码专区丝袜| 国产成人亚洲综合网站不卡| 亚洲男人的天堂久久精品| youjizz亚洲| 亚洲а∨天堂久久精品9966| 亚洲色欲啪啪久久WWW综合网| 亚洲色大成网站www永久男同| 亚洲精品久久久久无码AV片软件| 亚洲国产精品99久久久久久| 无码一区二区三区亚洲人妻| 无码人妻一区二区三区免费视频| 一进一出60分钟免费视频| 精品久久久久久无码免费| 国产综合免费精品久久久| 久久久国产精品福利免费| 免费无码VA一区二区三区| 亚洲高清中文字幕免费| 毛片免费视频观看| 全亚洲最新黄色特级网站| 久久久久亚洲精品天堂久久久久久| 亚洲中文字幕无码一久久区| 久久精品亚洲一区二区| 亚洲人成网站日本片| 亚洲精品第一国产综合亚AV| 一级A毛片免费观看久久精品 | 亚洲中文字幕久在线| 亚洲精品成a人在线观看夫| 夜夜爽妓女8888视频免费观看| 永久在线观看免费视频| 免费不卡视频一卡二卡| 国产亚洲福利一区二区免费看| 亚洲欧洲久久av| 亚洲午夜在线电影| 亚洲精品无码av中文字幕| 国产麻豆一精品一AV一免费| 久久免费福利视频| 少妇高潮太爽了在线观看免费| 国产在线不卡免费播放|