普通类实现枚举与抽象类的应用比较
来源:互联网 发布:语音识别用到的算法 编辑:程序博客网 时间:2024/04/28 20:10
普通类实现枚举与抽象类的应用比较
分类: Java 2012-06-05 12:00 560人阅读 评论(0)收藏举报
stringclass测试
当我们想实现一个星期几的枚举时候我们自己编写一个类来实现!如果我们用实体类的代码如下:
- package com.jemsn.weekday;
- public class WeekDay {
- //构造函数私有化 让别人不可以再创建新的对象实例
- private WeekDay () {}
- public static final WeekDay MonDay=new WeekDay();
- public staticfinal WeekDay Tuesay=new WeekDay();
- public static final WeekDay WendsDay=new WeekDay();
- public staticfinal WeekDay ThusDay=new WeekDay();
- public static final WeekDay FriDay=new WeekDay();
- public staticfinal 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 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 staticvoid main(String[] args) {
- WeekDay monday=WeekDay.MonDay;
- WeekDay tuesday=WeekDay.Tuesay;
- System.out.println(monday.NextDay());
- System.out.println(tuesday.NextDay());
- }
- }
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 abstractclass 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 staticfinal WeekDay WendsDay=new WeekDay(){
- public WeekDay NextDay() {
- return WeekDay.ThusDay;
- }
- };
- public static final WeekDay ThusDay=new WeekDay(){
- public WeekDay NextDay() {
- return WeekDay.FriDay;
- }
- };
- public staticfinal WeekDay FriDay=new WeekDay(){
- public WeekDay NextDay() {
- return WeekDay.StaDay;
- }
- };
- public static final WeekDay StaDay=new WeekDay(){
- public WeekDay NextDay() {
- return WeekDay.SunDay;
- }
- };
- public staticfinal 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?"星期四":"星期五";
- }
- }
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#接口与抽象类的比较
- Radar Installation(POJ1328转化为活动安排问题)
- mysql进程SHOW PROCESSLIST详解Command命令状态
- 服务器
- 堆排序的实现
- Hdoj1027Ignatius and the Princess II(全排列问题)
- 普通类实现枚举与抽象类的应用比较
- Android串口的源码(android-serialport-api)
- Road Construction
- poj2739 - Sum of Consecutive Prime Numbers(求素数)
- UNIX网络编程——僵尸进程
- 按键中断 定时器中断的练习
- 一个可无限伸缩且无ABA问题的无锁队列
- 大连实训之基于MFC对数据库的基本操作(功能实现)
- KMP算法详解