Không, chúng ta không thể extends (kế thừa) một enum trong Java. Java enum ngầm kế thừa java.lang.Enum, do đó enum type không thể extends lớp khác.
Cú pháp Enum
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
// some statements
}
Đặc điểm Enum
- Kiểu dữ liệu đặc biệt thêm từ Java 1.5.
- Dùng định nghĩa tập hợp hằng số (constants), khi cần danh sách giá trị định trước không biểu diễn dữ liệu số/văn bản.
- Enum là hằng số, mặc định static và final. Tên trường enum viết IN HOA.
- Chỉ public hoặc protected dùng cho top-level enum, nhưng tất cả access modifier dùng cho nested enum.
- Enum có thể có field, constructor, method, implement interface.
- Mỗi hằng số enum có thể override method (constant-specific class body).
Ví dụ Enum với method abstract
enum Country {
US {
public String getCurrency() { return "DOLLAR"; }
},
RUSSIA {
public String getCurrency() { return "RUBLE"; }
},
INDIA {
public String getCurrency() { return "RUPEE"; }
};
public abstract String getCurrency();
}
public class ListCurrencyTest {
public static void main(String[] args) {
for (Country country : Country.values()) {
System.out.println(country.getCurrency() + " is the currency of " + country.name());
}
}
}
Kết quả đầu ra
DOLLAR is the currency of US RUBLE is the currency of RUSSIA RUPEE is the currency of INDIA
Tóm tắt
- Enum không thể extends class khác (đã extends java.lang.Enum).
- Enum có thể implements interface.
- Enum không thể bị extends (implicit final).
- Dùng interface nếu cần hành vi đa hình thay vì kế thừa enum.