黑马程序员技术交流社区

标题: 请问这里怎么理解 [打印本页]

作者: 911趣购    时间: 2014-3-31 00:10
标题: 请问这里怎么理解
  1. package Test;

  2. public abstract class WeekDay {
  3.    private WeekDay(){}
  4.    public final static WeekDay SUN=new WeekDay(){

  5.         @Override
  6.         public WeekDay nextDay() {
  7.                 // TODO Auto-generated method stub
  8.                 return MON;
  9.         }
  10.           
  11.    };
  12.    public final static WeekDay MON=new WeekDay(){

  13.         @Override
  14.         public WeekDay nextDay() {
  15.                 // TODO Auto-generated method stub
  16.                 return SUN;
  17.         }
  18.           
  19.    };
  20.    //采用抽象方法将ifelse语句转换为一个独立的类
  21.    public abstract WeekDay nextDay();
  22.    
  23.   /* public WeekDay nextDay(){
  24.            if(this==SUN){
  25.                    return MON;
  26.            }else{
  27.                    return SUN;
  28.            }
  29.    }*/
  30.    //打印这个枚举对象
  31.    public String toString(){
  32.            return this==SUN?"SUN":"MON";
  33.    }
  34. }
复制代码

今天看到张老师的枚举类型的课程  遇到了这里不明白的  该怎么理解呢
return this==SUN?"SUN":"MON";---------这里的this===为什么等于的是SUN呢?



作者: ehuashao    时间: 2014-3-31 10:11
  1. public final static WeekDay MON=new WeekDay(){

  2.         @Override
  3.         public WeekDay nextDay() {
  4.                 // TODO Auto-generated method stub
  5.                 return SUN;
  6.         }
  7.            
  8.    };
复制代码

上面这个内部类的引用为MON,调用它的nextDay方法返回的是个引用SUN。当我们在主函数调用的时候:
  1. WeekDay weekday = new WeekDay.MON;
  2. System.out.println(weekday.nextDay().toString());
复制代码

上面代码的输出是SUN。
现在weekday引用指向MON,所以调用weekday.nextDay()返回的是SUN的引用。之后再调用toString()方法,就相当于SUN.toString()。return this==SUN?"SUN":"MON";这里的this指的是所创建引用调用nextDay()方法后所返回的nextday的引用,现在创建的引用为MON,调用nextDay()返回SUN,所以判断它是不是SUN,是就返回SUN,不是就返回MON.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2