枚举类
前面我们已经遇到过,如何定义一个枚举类:
public enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE};
这就定义了一个枚举类,它刚好有四个实例。在此尽量不要构造新的对象,也不要用equals方法来比较两个枚举类的值,直接使用“==”就可以了。如果需要的话,可以在枚举类型中添加一些构造器,方法和域。
所有的枚举类都是Enum的子类,它们继承了这个类的许多方法。其中最有用的就是toString方法,这个方法能够返回枚举常量名。toString的逆方法是静态方法valueOf。例如,语句:
Size s = Enum.valueOf(Size.class,"SMALL");
每个枚举类都有一个静态的values方法,它将返回一个包含全部枚举值的数组。
Size[] values = Size.values();
ordinal方法返回enumeration声明中枚举常量的位置,从0开始计数。
package enums;
import java.util.Scanner;
/**
* This program demonstrates enumerated types.
*
*/
public class EnumTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a Size : SMALL,MEDIUM,LARGE,EXTRA_LARGE");
String input = scan.next().toUpperCase();
Size size = Enum.valueOf(Size.class, input);
System.out.println("size="+size);
System.out.println("abbreviation = "+size.getAbbreviation());
if(size==Size.EXTRA_LARGE) {
System.out.println("Good job--you paid attention to the _.");
}
}
}
enum Size{
SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation) {
this.abbreviation = abbreviation;
}
public String getAbbreviation() {
return abbreviation;
}
}
继承的设计技巧
①将公共操作和域放在超类
②不要使用受保护的域
不使用protected主要原因有两点:第一,子类集合是无限制的,任何一个人都能够由某个类派生一个子类,并编写代码以直接访问protected实例域,从而破坏了封装性。第二,在Java中,同一个包中的所有类都可以访问protected域,而不管它是否为这个类的子类
③使用继承实现“is-a”关系
④除非所有继承的方法都有意义,否则不要使用继承
⑤在覆盖方法时,不要改变预期的行为
⑥使用多态,而非类型信息
⑦不要过多地使用反射