黑马程序员技术交流社区
标题:
枚举中的抽象方法
[打印本页]
作者:
2012
时间:
2013-9-14 13:09
标题:
枚举中的抽象方法
本帖最后由 杨增坤 于 2013-9-16 17:09 编辑
关于枚举的基本使用方法,我能理解。大家都知道枚举就是一个特殊的类 ,他和普通类一样,都可以实现一个或多个接口,同样可以包含抽象方法。
关于枚举实现接口或包含抽象方法,非常模糊。希望那问大神能详细的帮我解答一下。
比如枚举实现接口,肯定会实现接口中的所有方法。怎么让枚举中的不同对象,调用同一个方法出现不同的结果?
关于包含抽象方法,这个一点都不明白,不知道怎么去重写这个抽象方法?
作者:
罗凯健
时间:
2013-9-14 13:56
本帖最后由 罗凯健 于 2013-9-14 14:07 编辑
实现接口部分, 你可以去JDK里面找一下枚举的values()方法。
---稍等一下,我去试试= =
作者:
罗凯健
时间:
2013-9-14 14:31
不知道你要的是什么效果,随便写了个。
接口:
public interface Test {
public void prints();
}
实现类是张老师的交通灯那个灯类,我只把实现方法写一下:
@Override
public void prints() {
// TODO Auto-generated method stub
System.out.println(this.name());
}
调用prints方法就会打印出调用者的名字。貌似跟普通类差不多
作者:
code_geass
时间:
2013-9-14 15:16
本帖最后由 code_geass 于 2013-9-14 15:18 编辑
//枚举一般定义方式,每一个元素都是枚举的实例对象。我理解为空参数空方法。
/*
public enum Fruits{
APPLE,PEACH,PEAR
}
*/
/*如果需要在枚举中定义构造方法。方法或者抽象方法时。需要在最后一个元素后加;(分号)后面写对应的方法。不管是实现的接口,还是自己定义的抽象方法。包括构造方法。都在枚举的实例对象中实现。*/
public enum Fruits implements Runnable {
APPLE(1){
public void run(){}
public void show(){}
},PEACH(2){
public void run(){}
public void show(){}
}
,PEAR(3){
public void run(){}
public void show(){}
};
//定义构造方法必须为private
private Fruits(int num){}
//定义抽象方法
public abstract void show();
}
复制代码
作者:
Inspur
时间:
2013-9-14 16:29
实现带有抽象、构造方法的枚举:
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(40){
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;}
}
在这个例子中,枚举
TrafficLamp
的三个成员
RED,GREEN,YELLOW
先调用
TrafficLamp
的带有
int
类型参数的构造方法创建,再实现枚举中的抽象方法
nextLamp
(),
RED,GREEN,YELLOW调用同一个nextLamp()方法,分别返回的是自己的下一个灯,即调用同一个方法返回不同的结果,
是一个比较复杂的枚举。
作者:
Bad_Boy
时间:
2013-9-14 18:45
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("红色", 1), GREEN("绿色", 2),YELLO("黄色", 3);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
复制代码
希望这个能帮的上你
作者:
杨增坤
时间:
2013-9-14 22:41
楼主,你好!
如果您的问题解决了,请把您问题的
未解决
更改为
已解决
!
谢谢合作!
作者:
doevents
时间:
2013-9-15 05:37
public class EnumTest02 {
/**
* @param args
*/
public static void main(String[] args) {
Person p=Person.one;
p.lie();
p.rice();
}
interface sleep{
public void lie();
}
interface eat{
public void rice();
}
public enum Person implements sleep,eat{
one,two,three;
private Person(){}
public void lie(){
System.out.println("躺着睡");
}
public void rice(){
System.out.println("吃饭");
}
}
}
希望这代码能够解决你的问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2