普通類實現枚舉與抽象類別的應用比較

來源:互聯網
上載者:User

當我們想實現一個星期幾的枚舉時候我們自己編寫一個類來實現!如果我們用實體類的代碼如下:

package com.jemsn.weekday;public class WeekDay {//建構函式私人化 讓別人不可以再建立新的對象執行個體private WeekDay () {}   public static final WeekDay MonDay=new WeekDay();   public static final WeekDay Tuesay=new WeekDay();   public static final WeekDay WendsDay=new WeekDay();   public static final WeekDay ThusDay=new WeekDay();   public static final WeekDay FriDay=new WeekDay();   public static final WeekDay StaDay=new WeekDay();   public static final WeekDay SunDay=new WeekDay();   //如果我們要一個NextDay()方法   public WeekDay NextDay() {   if(this==MonDay){   return Tuesay;   }else if(this==Tuesay){   return WendsDay;   }      else if(this==WendsDay){   return ThusDay;   }   else if(this==ThusDay){   return FriDay;   }   else if(this==FriDay){   return StaDay;   }   else if(this==StaDay){   return SunDay;   }else {return MonDay;} } //重寫ToString方法public String toString() { return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五";}   }

然後我們在測試代碼裡調用它:

package com.jemsn.weekday;public class test {  public static void main(String[] args) {WeekDay monday=WeekDay.MonDay;WeekDay tuesday=WeekDay.Tuesay;System.out.println(monday.NextDay());System.out.println(tuesday.NextDay());}}

輸出結果如下:

-----------------------------------------------------------------------

星期二
星期三

-----------------------------------------------------------------------

上面的代碼我們可以看出,在我們的NextDay方法中用了一大堆的if else else if 之類的,如果我們裝基改為抽象類別,如下代碼:

package com.jemsn.weekday;public abstract class WeekDay {//建構函式私人化 讓別人不可以再建立新的對象執行個體private WeekDay () {}   public static final WeekDay MonDay=new WeekDay(){ public WeekDay NextDay() {return WeekDay.Tuesay;}      };   //採用了匿名內部類的實現方式   public static final WeekDay Tuesay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.WendsDay;}      };   public static final WeekDay WendsDay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.ThusDay;}      };   public static final WeekDay ThusDay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.FriDay;}      };   public static final WeekDay FriDay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.StaDay;}      };   public static final WeekDay StaDay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.SunDay;}      };   public static final WeekDay SunDay=new WeekDay(){   public WeekDay NextDay() {return WeekDay.MonDay;}      };   //如果我們要一個NextDay()方法   public abstract WeekDay NextDay();   //重寫ToString方法public String toString() { return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五";}   }

上面的代碼中我們將if else分別轉化成了一個個獨立的類,測試代碼不變,輸出的結果如下 :

-----------------------------------------------------------------------

星期二
星期三

-----------------------------------------------------------------------

我們看到的還是一樣,但是實現的方式卻完全不一樣!所以我們可以總結用抽象方法結合匿名內部類實現比統一的更加好!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.