黑马程序员技术交流社区
标题:
关于枚举的提问
[打印本页]
作者:
ㄗ灬Night|K
时间:
2013-10-9 18:09
标题:
关于枚举的提问
本帖最后由 ㄗ灬Night|K 于 2013-10-9 20:58 编辑
程序第8行,对象怎么直接调用了变量time ??? 不是很明白,在之前的学习中没出现这种情形吧。。。。
package com.jemsn.weekday;
public class test {
public static void main(String[] args) {
TrafficLamp red=TrafficLamp.Red;
System.out.println(red.NextLamp());
System.out.println("this time is "+red.Time);
}
public enum TrafficLamp{
Red(30){
public TrafficLamp NextLamp() {
return GREEN;
}
},
GREEN(45){
public TrafficLamp NextLamp() {
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp NextLamp() {
return Red;
}
};
//抽象方法
public abstract TrafficLamp NextLamp();
private int Time;
//枚举的有参构造函数
private TrafficLamp(int time) {
this.Time=time;
}
}
}
复制代码
作者:
斗胆潇洒
时间:
2013-10-9 18:33
本帖最后由 斗胆潇洒 于 2013-10-9 18:37 编辑
枚举类,不过是受了点约束的java类而已。很多东西还是java类的规则。
(1)首先,先看看张老师怎么用普通类模拟枚举类功能的,就大概能知道要实现枚举功能普通的java类要做什么约束。
(2)再结合下单例模式,去看枚举类的实现,只能创建本类对象而已,加final修饰。
(3)如果你反编译一个enum枚举类,会发现它是一个被final修饰的java类而已(这也就限制了枚举类不能派生了)。
结合上述三点,都没说类中不能有成员变量,且没说本类对象不能调用成员变量哈,没约束的规则你用就是的{:soso_e144:}
作者:
winsking
时间:
2013-10-9 19:46
枚举中每个元素都相当于枚举类的一个子类对象,你可以理解为元素都继承了枚举,所以枚举中定义的属性方法,枚举元素都可以直接拿来用,所以方法、属性都可以直接调用
作者:
吴清源
时间:
2013-10-9 19:58
private是私有的声明,对于在自身类之外的类中的方法进行调用时才会出错。由于你把枚举类定义为内部类,其本身就属于test该类的一个成员,在test类中调用其内部类的私有方法是不会报错的。想要报错,就把它定义为外部类吧,像这样
public class Test {
public static void main(String[] args) {
TrafficLamp red=TrafficLamp.Red;
System.out.println(red.NextLamp());
System.out.println("this time is "+red.Time); //这里就会提示TrafficLamp.time不可视
}
}
enum TrafficLamp{
Red(30){
public TrafficLamp NextLamp() {
return GREEN;
}
},
GREEN(45){
public TrafficLamp NextLamp() {
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp NextLamp() {
return Red;
}
};
//抽象方法
public abstract TrafficLamp NextLamp();
private int Time;
//枚举的有参构造函数
private TrafficLamp(int time) {
this.Time=time;
}
}
复制代码
、
作者:
占琳
时间:
2013-10-9 23:52
人家问的是怎么调用的 time这个属性 。。
private TrafficLamp(int time) {
this.Time=time;
}
Red(30) 看到没 这个30就相当于构造函数里面那个time,RED是不是一个枚举对象,
它里面是不是有30这个time的属性,访问对象的属性是不是对象名.属性。
作者:
To
时间:
2013-10-10 10:49
楼主你好,如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2