CoreJava读书笔记--继承(四)--枚举类与继承的设计技巧

枚举类

前面我们已经遇到过,如何定义一个枚举类:

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.
 * @author 弓长小月
 *
 */
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”关系

④除非所有继承的方法都有意义,否则不要使用继承

⑤在覆盖方法时,不要改变预期的行为

⑥使用多态,而非类型信息

⑦不要过多地使用反射

猜你喜欢

转载自blog.csdn.net/zxyy2627/article/details/82626563
今日推荐