普通类实现枚举与抽象类的应用比较

来源:互联网 发布:语音识别用到的算法 编辑:程序博客网 时间:2024/04/28 20:10

普通类实现枚举与抽象类的应用比较

分类: Java 560人阅读 评论(0)收藏举报
stringclass测试

当我们想实现一个星期几的枚举时候我们自己编写一个类来实现!如果我们用实体类的代码如下:

[java] view plaincopyprint?
  1. package com.jemsn.weekday;
  2. public class WeekDay {
  3. //构造函数私有化 让别人不可以再创建新的对象实例
  4. private WeekDay () {}
  5. public static final WeekDay MonDay=new WeekDay();
  6. public staticfinal WeekDay Tuesay=new WeekDay();
  7. public static final WeekDay WendsDay=new WeekDay();
  8. public staticfinal WeekDay ThusDay=new WeekDay();
  9. public static final WeekDay FriDay=new WeekDay();
  10. public staticfinal WeekDay StaDay=new WeekDay();
  11. public static final WeekDay SunDay=new WeekDay();
  12. //如果我们要一个NextDay()方法
  13. public WeekDay NextDay() {
  14. if(this==MonDay){
  15. return Tuesay;
  16. }else if(this==Tuesay){
  17. return WendsDay;
  18. }
  19. else if(this==WendsDay){
  20. return ThusDay;
  21. }
  22. else if(this==ThusDay){
  23. return FriDay;
  24. }
  25. else if(this==FriDay){
  26. return StaDay;
  27. }
  28. else if(this==StaDay){
  29. return SunDay;
  30. }else {
  31. return MonDay;
  32. }
  33. }
  34. //重写ToString方法
  35. public String toString() {
  36. return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五";
  37. }
  38. }

然后我们在测试代码里调用它:

[java] view plaincopyprint?
  1. package com.jemsn.weekday;
  2. public class test {
  3. public staticvoid main(String[] args) {
  4. WeekDay monday=WeekDay.MonDay;
  5. WeekDay tuesday=WeekDay.Tuesay;
  6. System.out.println(monday.NextDay());
  7. System.out.println(tuesday.NextDay());
  8. }
  9. }

输出结果如下:

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

星期二
星期三

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

上面的代码我们可以看出,在我们的NextDay方法中用了一大堆的if else else if 之类的,如果我们装基改为抽象类,如下代码:

[java] view plaincopyprint?
  1. package com.jemsn.weekday;
  2. public abstractclass WeekDay {
  3. //构造函数私有化 让别人不可以再创建新的对象实例
  4. private WeekDay () {}
  5. public static final WeekDay MonDay=new WeekDay(){
  6. public WeekDay NextDay() {
  7. return WeekDay.Tuesay;
  8. }
  9. };
  10. //采用了匿名内部类的实现方式
  11. public static final WeekDay Tuesay=new WeekDay(){
  12. public WeekDay NextDay() {
  13. return WeekDay.WendsDay;
  14. }
  15. };
  16. public staticfinal WeekDay WendsDay=new WeekDay(){
  17. public WeekDay NextDay() {
  18. return WeekDay.ThusDay;
  19. }
  20. };
  21. public static final WeekDay ThusDay=new WeekDay(){
  22. public WeekDay NextDay() {
  23. return WeekDay.FriDay;
  24. }
  25. };
  26. public staticfinal WeekDay FriDay=new WeekDay(){
  27. public WeekDay NextDay() {
  28. return WeekDay.StaDay;
  29. }
  30. };
  31. public static final WeekDay StaDay=new WeekDay(){
  32. public WeekDay NextDay() {
  33. return WeekDay.SunDay;
  34. }
  35. };
  36. public staticfinal WeekDay SunDay=new WeekDay(){
  37. public WeekDay NextDay() {
  38. return WeekDay.MonDay;
  39. }
  40. };
  41. //如果我们要一个NextDay()方法
  42. public abstract WeekDay NextDay();
  43. //重写ToString方法
  44. public String toString() {
  45. return this==MonDay?"星期一":this==Tuesay?"星期二":this==WendsDay?"星期三":this==ThusDay?"星期四":"星期五";
  46. }
  47. }

上面的代码中我们将if else分别转化成了一个个独立的类,测试代码不变,输出的结果如下 :

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

星期二
星期三

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

我们看到的还是一样,但是实现的方式却完全不一样!所以我们可以总结用抽象方法结合匿名内部类实现比统一的更加好!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东自营发错货怎么办 手机店中奖手机怎么办 支付宝账户挂失怎么办 微信被骗1800怎么办 存储卡无法格式化怎么办 内存卡硬件损坏怎么办 苹果换新手机id怎么办 支付宝存在风险怎么办 键盘玩游戏失灵怎么办 机械键盘按键冲突怎么办 想和他和好怎么办 异地恋吵架了怎么办 异地恋吵架后怎么办 横屏游戏变竖屏怎么办 三星w2016购买后怎么办 电脑账户删不了怎么办 手机副版出问题怎么办 越狱证书过期了怎么办 iphone7不停重启怎么办 手机被病毒入侵怎么办 苹果手机不息屏怎么办 苹果手机散屏怎么办 苹果手机屏幕死机了怎么办 苹果手机屏死机怎么办 微信号账号异常怎么办 手机设置加密了怎么办 华为手机触屏坏了怎么办 安卓启动器停止怎么办 手机显示停止运行怎么办 手机来电被拦截怎么办 手机被加黑名单怎么办 手机短信被屏蔽了怎么办 手机信息被拦截怎么办 手机有感染病毒怎么办 华为p10速度慢怎么办 华为手机清理慢 怎么办 华为手机有回音怎么办 手机没有返回键怎么办 手机总显示内存不足怎么办 扩音器耳麦接触不良怎么办 音响插头接触不良怎么办