首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 繼承實戰:Employee 基類與 Manager 子類的差異化設計

     編輯:Java 程式設計入門

場景:同一公司,不同薪酬結構

員工與經理共享「姓名、工資、生日」等基礎屬性,但經理額外擁有「獎金」。利用繼承,Manager 僅需擴充獎金相關字段與方法,即可復用 Employee 的所有邏輯,避免代碼重複。

類圖結構

Employee (父類)
├── name: String
├── salary: double
├── birthday: Date
├── getter/setter

Manager (子類) extends Employee
├── bonus: double
├── getBonus()/setBonus()

完整代碼實現

Employee.java

import java.util.Date;

public class Employee {
    private String name;
    private double salary;
    private Date birthday;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public double getSalary() { return salary; }
    public void setSalary(double salary) { this.salary = salary; }

    public Date getBirthday() { return birthday; }
    public void setBirthday(Date birthday) { this.birthday = birthday; }
}

Manager.java

public class Manager extends Employee {
    private double bonus;

    public double getBonus() { return bonus; }
    public void setBonus(double bonus) { this.bonus = bonus; }
}

測試類 Test.java

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Employee emp = new Employee();
        emp.setName("Java");
        emp.setSalary(100);
        emp.setBirthday(new Date());

        Manager mgr = new Manager();
        mgr.setName("明日科技");
        mgr.setSalary(3000);
        mgr.setBirthday(new Date());
        mgr.setBonus(2000);  // 子類特有屬性

        System.out.println("員工姓名:" + emp.getName());
        System.out.println("員工工資:" + emp.getSalary());
        System.out.println("員工生日:" + emp.getBirthday());
        System.out.println("經理姓名:" + mgr.getName());
        System.out.println("經理工資:" + mgr.getSalary());  // 繼承自父類
        System.out.println("經理生日:" + mgr.getBirthday()); // 繼承自父類
        System.out.println("經理獎金:" + mgr.getBonus());   // 子類擴充
    }
}

運行輸出

員工姓名:Java
員工工資:100.0
員工生日:Sat Jan 14 14:10:41 CST 2017
經理姓名:明日科技
經理工資:3000.0
經理生日:Sat Jan 14 14:10:41 CST 2017
經理獎金:2000.0

核心知識點總結

  • is-a 關係:Manager 是一個 Employee,符合繼承語義。
  • 字段繼承:子類實例包含父類所有私有字段(透過 getter/setter 訪問)。
  • 方法復用:getSalary() 等父類方法直接可用,無需重寫。
  • 擴充而非修改:子類只新增 bonus,符合開閉原則。
  • 構造器鏈:子類構造器隱式調用 super(),父類先初始化(詳見 初始化順序)。

補充:父子類初始化順序

class A { A() { System.out.println("A"); } }
class B extends A { B() { System.out.println("B"); } }
class C extends B { C() { System.out.println("C"); } }
new C(); // 輸出 A → B → C

記住口訣:父類靜態 → 子類靜態 → 父類實例/塊 → 父構造器 → 子類實例/塊 → 子構造器。

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