普通类实现枚举与抽象类的应用比较
来源:互联网 发布:mac安装win8双系统 编辑:程序博客网 时间:2024/04/28 18:06
当我们想实现一个星期几的枚举时候我们自己编写一个类来实现!如果我们用实体类的代码如下:
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分别转化成了一个个独立的类,测试代码不变,输出的结果如下 :
-----------------------------------------------------------------------
星期二
星期三
-----------------------------------------------------------------------
我们看到的还是一样,但是实现的方式却完全不一样!所以我们可以总结用抽象方法结合匿名内部类实现比统一的更加好!
- 普通类实现枚举与抽象类的应用比较
- 普通类实现枚举与抽象类的应用比较
- 普通类实现枚举类
- 抽象类与抽象方法的应用
- 用普通类模拟枚举的实现原理
- 黑马程序员 - 用普通类模拟枚举的实现原理
- 枚举类的应用,带抽象的方法
- 普通类模拟枚举类实现
- Java普通类实现枚举类型
- 使用普通类实现枚举类型
- 运用普通类模拟实现枚举功能
- java普通类模拟枚举实现原理
- C#抽象类与接口的比较
- C#抽象类与接口的比较
- C#抽象类与接口的比较
- Java接口与抽象类的比较
- 抽象类与接口的比较
- C#接口与抽象类的比较
- 报道。
- 图像的小波变换处理
- C++更改鼠标图标
- codeforces----193B Xor
- 伪代码中的约定
- 普通类实现枚举与抽象类的应用比较
- jQuery选择器总结
- 电脑中部分文字显示为乱码
- .NET生成随机数方法
- vi 简易说明
- Serializable Parcelabel
- netadvantage WebCurrencyEdit动态改变货币显示符号
- SqlHelper说明
- HTTP状态码(HTTP Status Code)详解