黑马程序员技术交流社区
标题:
枚举类中的抽象方法
[打印本页]
作者:
黑马王冬冬
时间:
2012-7-30 14:11
标题:
枚举类中的抽象方法
public enum Operation2
{
PLUS
{
public double eval(double x , double y)
{
return x + y;
}
},
MINUS
{
public double eval(double x , double y)
{
return x - y;
}
},
TIMES
{
public double eval(double x , double y)
{
return x * y;
}
},
DIVIDE
{
public double eval(double x , double y)
{
return x / y;
}
};
public abstract double eval(double x, double y);//位置1,此处为枚举类定义了一个抽象方法
public static void main(String[] args)
{
System.out.println(Operation.PLUS.eval(3, 4));
System.out.println(Operation.MINUS.eval(5, 4));
System.out.println(Operation.TIMES.eval(5, 4));
System.out.println(Operation.DIVIDE.eval(5, 4));
}
}
复制代码
今天读书的时候发现这样一段代码,位置1处的代码好像很多余,是不是去掉也没有区别,不明白此处为何非要定义这么一个抽象方法?
作者:
王峰
时间:
2012-7-30 15:22
不多余,如果没有这一行代码,那么假如枚举类没有这个方法,但是调用了eval方法,这样main方法不是会抛出一个异常吗?主要是防止异常用的,你可以试试,去掉这一行,在去掉枚举类中的eval方法,试试
作者:
周坤
时间:
2012-7-30 16:47
enum类是很特殊的一个类,实际上它是一个抽象类。
枚举中可以用抽象方法,但是枚举中的每一个对象都分别实现抽象方法;
public abstract double eval(double x, double y);把这句去掉,主函数里System.out.println(Operation.PLUS.eval(3, 4));,就无法调用eval方法了。
作者:
陈红建
时间:
2012-7-30 18:11
手机党路过了。我只知道,抽象类里面最少也要有一个抽象方法,如果他没有抽象方法那这个抽象类就没价值。我是路过围观的。不用管我了
作者:
金龙
时间:
2012-7-30 18:44
PLUS
04. {
05. public double eval(double x , double y)
06. {
07. return x + y;
08. }
09. },
复制代码
楼主,枚举内部的元素都可以看做一个对象,这个对象在底层创建的时候是通过匿名内部类来创建的,匿名内部类的格式是new父类的接口,大括号实现接口内的方法,这个匿名内部类就相当于这个接口的子类了,所以枚举内的元素都是枚举这个类的子类对象。
作者:
刘海源
时间:
2012-7-30 19:05
System.out.println(Operation.PLUS.eval(3, 4));
就用这一条来说吧,其实不定义抽象方法也是可以的,但是关键是用了Operation调用这就必须定义抽象方法
就想内部类是外部类的父类似的,子类复写了父类的抽象方法
重要的是用父类的类名调用了一些方法那么就必须定义抽像类,这是因为当用父类名调用子类的方法时,父类必须有该方法,不然就会发生编译错误。
作者:
王程
时间:
2012-7-30 20:39
PLUS这个实例对象不是枚举的实例对象,而是它的子类的实例对象,枚举是一个类,而枚举类的一个元素相当于该类的一个实例对象,因为这个枚举类带有一个抽象方法,所以实例对象不能直接new出来,但是可以通过枚举的子类new出来,需要重写抽象方法,抽象方法就是 public abstract double eval(double x, double y),子类的代码写在{}中,用子类new出来的对象是PLUS,如果把抽象方法去掉,实例对象中的方法就是无中生有的。顺便提一句,System.out.println(Operation
2
.PLUS.eval(3, 4));输入代码要仔细啊
作者:
涂金哲
时间:
2012-7-31 12:02
简单的说一下枚举类的一些特点:1.枚举类可以有自己的构造器,但是枚举类
的实例必须显示的列举出来的,否则不能产生实例。这跟普通类不一样。2.枚
举类型如果有abstract方法的成员,那么必须保证枚举类有一个以上的枚举常
量,并且每个枚举常量都提供了该成员的具体实现类体。这个程序正是因为枚
举有这样的一个特点,所以定义一个抽象的eval方法成员,然后在枚举常量中
实现不同的方法。这个好模拟了算数运算的。如果没有了抽象的方法编译会出现问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2