คำตอบ: ไม่ได้ Enum ใน Java Implicitly Extends java.lang.Enum แล้ว และ Java ไม่รองรับ Multiple Inheritance สำหรับ Class
รายละเอียด
- ทุก Enum คอมไพล์แล้วจะกลายเป็น Class ที่
extends Enum<E> - Java Class 繼承ได้เพียง Class เดียว (Single Inheritance)
- ดังนั้น Enum ไม่สามารถ Extends Class อื่นเพิ่มเติมได้
ตัวอย่างที่ Error
class Sample {
void hello() {}
}
// Compile Error!
enum Scooters extends Sample {
HONDA, YAMAHA, SUZUKI
}
Compile Error
EnumExample.java:5: error: '{' expected
enum Scooters extends Sample{
^
EnumExample.java:5: error: ',', '}', or ';' expected
enum Scooters extends Sample{
^
แต่ Enum สามารถ Implements Interface ได้!
interface Drivable {
void drive();
}
enum Vehicle implements Drivable {
CAR {
public void drive() { System.out.println("Driving Car"); }
},
BIKE {
public void drive() { System.out.println("Riding Bike"); }
};
// ต้อง Implement Abstract Method ของ Interface
public abstract void drive();
}
public class EnumImplementsInterface {
public static void main(String[] args) {
Vehicle.CAR.drive(); // Driving Car
Vehicle.BIKE.drive(); // Riding Bike
}
}
สิ่งที่ Enum ทำได้ (แม้ Extends Class ไม่ได้)
- Implements Interface (หลาย Interface ได้)
- มี Field, Method, Constructor (Private/ Package-private Only)
- Override Method ของ
EnumClass (เช่นtoString(),compareTo()) - มี Constant-specific Body (Anonymous Class ต่อ Constant)
ตัวอย่าง Enum สมบูรณ์
enum Planet implements Comparable<Planet> {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6);
private final double mass;
private final double radius;
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double surfaceGravity() {
return 6.67300E-11 * mass / (radius * radius);
}
@Override
public String toString() {
return name() + " (g=" + surfaceGravity() + ")";
}
}
สรุป
- Enum extends java.lang.Enum อัตโนมัติ
- ไม่สามารถ Extends Class อื่นได้ (Single Inheritance)
- สามารถ Implements Interface ได้หลายตัว
- ใช้ Interface แทนการ Extends Class เพื่อ Polymorphism