黑马程序员技术交流社区

标题: 还是枚举!真心求解释! [打印本页]

作者: 杨志    时间: 2012-4-28 21:48
标题: 还是枚举!真心求解释!

  1. public enum TranfficLamp {

  2. RED(300) {

  3. public TranfficLamp nextLamp() {


  4. return GREEN;

  5. }

  6. },

  7. GREEN {


  8. @Override

  9. public TranfficLamp nextLamp() {


  10. return YELLOW;

  11. }

  12. },

  13. YELLOW {


  14. @Override

  15. public TranfficLamp nextLamp() {


  16. return RED;

  17. }

  18. };

  19. public abstract TranfficLamp nextLamp();

  20. private int time;

  21. private TranfficLamp(){

  22. }


  23. private TranfficLamp(int time){

  24. this.time = time;

  25. }


  26. }

  27. 视频中说这里就是在匿名子类初始化的时候会去调用父类的构造方法。这300就会在调用父类的构造方法的时候传入进去。
  28. 我想知道在初始化子类的时候,调用父类的构造方法,并传入值有什么意义。这谁能说说这个具体是怎么走的流程。
复制代码

作者: 金超    时间: 2012-4-28 22:44
意义就是子类继承了父类,那么就默认的含有父类的公共成员方法和公共成员变量,这些方法和变量在子类里不再重复声明。如果初始化子类的时候,不初始化父类,那么通过子类调用父类方法或变量的时候会出异常。所以,Java虚拟机会在你初始化子类的时候默认的初始化子类的父类。而且是一层一层的往上递进!
作者: 根号5    时间: 2012-4-28 23:15
楼主的意思是传入300有什么意义吧,你应该不是问的为什么要传入值(因为父类的构造方法需要传递参数的),你懂的。
RED(300) {

public TranfficLamp nextLamp() {


return GREEN;


}

},//"{}"中的代码就表示的是TranfficLamp的一个子类,这里使用匿名内部类来实现的,大括号外边的RED是TranfficLamp类的子类对象的引用。
这里传入值只是模拟交通信号灯,并不是真正的听300秒再运行,只是模拟  个人见解,呵呵,应该是这个意思



作者: 罗旭维    时间: 2012-4-28 23:34
调用父类构造方法只有一个意义就是初始化父类。
为什么要初始化父类,就在于子类继承的父类的代码会有一些需要初始化才有意义的需求。
这些都是逻辑上的需求,反正调用父类的构造函数的意义是初始化父类的代码。




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