列挙型クラスのアプリケーションシナリオ
場合によっては、選択できるいくつかの固定オプションがあります。列挙クラスが存在する前に、通常、それをいくつかの定数として定義することを選択します。列挙が存在した後、列挙を使用してそれを解決できます。たとえば、小さなゲームを設計するときは、限られた数の方向を使用し、各方向は異なるアクションを定義するため、この方向クラスは限られた数のインスタンスの場合であり、列挙を使用して、列挙を実現またはシミュレートできます成し遂げる。
列挙型を自分で実装します。
package EnumDemo;
public abstract class Director {
// 提供有限的几个选项
// 抽象类本不可以new 但此处用匿名内部类的形式实现了Director中的move方法
// 表面上看似是new了一个Director,实际是new的它的子类对象,用Director接收
// 用的是多态的思想
public static final Director UP = new Director("UP"){
@Override
public void move() {
System.out.println("向上走");
}
};
public static final Director DOWN = new Director("DOWN"){
@Override
public void move() {
System.out.println("向下走");
}
};
public static final Director LEFT = new Director("LEFT"){
@Override
public void move() {
System.out.println("向左走");
}
};
public static final Director RIGHT = new Director("RIGHT"){
@Override
public void move() {
System.out.println("向右走");
}
};
private String name;
private Director(String name){
this.name = name;
}
public String getName(){
return this.name;
}
// 不同的方向在调用move时处理不同 所以这里定义为抽象方法
public abstract void move();
}
テストデモ:
package EnumDemo;
public class DirectorDemo {
public static void main(String[] args) {
Director d = Director.UP;
System.out.println(d.getName());// UP
d.move(); // 向上走
}
}
Javaネイティブ列挙:
package EnumDemo;
public enum DirectorEnum {
// 枚举项
UP("UP"){
@Override
public void move() {
System.out.println("向上走");
}
},
// 带参构造 并且匿名内部类的方式实现抽象方法
DOWN("DOWN") {
@Override
public void move() {
System.out.println("向下走");
}
},
LEFT("LEFT") {
@Override
public void move() {
System.out.println("向左走");
}
},
RIGHT("RIGHT") {
@Override
public void move() {
System.out.println("向右走");
}
};
private String name;
private DirectorEnum(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public abstract void move();
}
テストデモ:
package EnumDemo;
public class DirectorEnumDemo {
public static void main(String[] args) {
DirectorEnum dd = DirectorEnum.DOWN;
System.out.println(dd.getName());// DOWN
dd.move();// 向下走
}
}
注:列挙型に抽象メソッドを含める必要はありません。この例の抽象メソッドは、列挙型クラスの高度な使用法を説明するためだけのものです。
列挙に関する注意:
キーワードenumを使用して列挙クラスを定義します
すべての列挙クラスはEnumのサブクラスです
列挙型クラスの最初の行は列挙型項目でなければなりません
列挙型クラスはコンストラクタを持つことができますが、それらはプライベートである必要があり、デフォルトもプライベートです
列挙型クラスは抽象メソッドを持つこともできますが、列挙型項目はこのメソッドをオーバーライドする必要があります