定義抽象 `Role`(姓名、年齡、性別私有、get/set、抽象 `play()`、兩構造器、體現 `this`),衍生 `Employee`(薪資、靜態 ID、覆寫 `play()`、final `sing()`、體現 `this`/`super`),再衍生 `Manager`(final `vehicle`),`main` 測試。
abstract class Role {
private String name; private int age; private String sex;
public Role(String name, int age) { this.name = name; this.age = age; } // this 區分欄位
public Role(String name, int age, String sex) { this(name, age); this.sex = sex; } // this 呼叫另一構造器
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// ... age, sex 同理
public abstract void play();
}
class Employee extends Role {
private double salary; private static int idGen = 1000; private final int id = idGen++;
public Employee(String name, int age, String sex, double salary) {
super(name, age, sex); // super 呼叫父構造器
this.salary = salary; // this 區分欄位
}
public Employee(String name, int age, double salary) {
this(name, age, "未知", salary); // this 呼叫本類另一構造器
}
public double getSalary() { return salary; }
public void setSalary(double salary) { this.salary = salary; }
public int getId() { return id; }
@Override public void play() { System.out.println("Employee working..."); }
public final void sing() { System.out.println("Singing..."); } // final 禁止覆寫
}
class Manager extends Employee {
private final String vehicle; // final 欄位必須構造器初始化
public Manager(String name, int age, String sex, double salary, String vehicle) {
super(name, age, sex, salary);
this.vehicle = vehicle;
}
@Override public void play() { System.out.println("Manager managing..."); }
}
public class Test {
public static void main(String[] args) {
Manager m = new Manager("Alice", 35, "F", 20000, "Audi");
Employee e = new Employee("Bob", 28, "M", 8000);
m.play(); m.sing(); System.out.println(m.getVehicle());
e.play(); e.sing(); System.out.println(e.getId());
}
}
涵蓋:私有封裝、get/set、構造器鏈(`this`/`super`)、抽象方法、final 方法/欄位、靜態欄位、多型呼叫。