首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 封裝/繼承/多態綜合練習:Role-Employee-Manager 完整代碼

     編輯:程式設計綜合問答

定義抽象 `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 方法/欄位、靜態欄位、多型呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved