Java面向對象的實際案例能很好體現封裝、繼承、多態的結合使用,以下是幾個貼近生活的場景案例:

案例1:校園人員管理系統(封裝+繼承+多態)

場景:學校有學生、老師兩類人員,需統一管理基本信息,同時區分各自特性(學生有學號、老師有工號)。

// 1. 父類:封裝共性屬性和方法
class Person {
    private String name; // 封裝姓名(私有屬性)
    private int age;

    // 構造器初始化
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter/setter暴露接口(封裝的體現)
    public String getName() { return name; }
    public int getAge() { return age; }

    // 共性方法:展示基本信息
    public void showInfo() {
        System.out.println("姓名:" + name + ",年齡:" + age);
    }
}

// 2. 子類1:學生(繼承+擴展)
class Student extends Person {
    private String studentId; // 學生專屬屬性

    public Student(String name, int age, String studentId) {
        super(name, age); // 繼承父類構造器
        this.studentId = studentId;
    }

    // 重寫父類方法(多態基礎)
    @Override
    public void showInfo() {
        super.showInfo(); // 複用父類邏輯
        System.out.println("身份:學生,學號:" + studentId);
    }

    // 學生專屬方法
    public void study() {
        System.out.println(getName() + "正在學習");
    }
}

// 3. 子類2:老師(繼承+擴展)
class Teacher extends Person {
    private String teacherId; // 老師專屬屬性

    public Teacher(String name, int age, String teacherId) {
        super(name, age);
        this.teacherId = teacherId;
    }

    // 重寫父類方法(多態基礎)
    @Override
    public void showInfo() {
        super.showInfo();
        System.out.println("身份:老師,工號:" + teacherId);
    }

    // 老師專屬方法
    public void teach() {
        System.out.println(getName() + "正在講課");
    }
}

// 4. 測試類(多態的實際應用)
public class SchoolSystem {
    public static void main(String[] args) {
        // 父類引用指向子類對象(多態)
        Person s = new Student("張三", 18, "2023001");
        Person t = new Teacher("李四", 35, "T001");

        // 調用同一方法,表現不同行為(多態特性)
        s.showInfo(); 
        // 輸出:姓名:張三,年齡:18;身份:學生,學號:2023001
        t.showInfo(); 
        // 輸出:姓名:李四,年齡:35;身份:老師,工號:T001

        // 子類專屬方法需強轉調用
        ((Student)s).study(); // 輸出:張三正在學習
        ((Teacher)t).teach(); // 輸出:李四正在講課
    }
}

案例2:電商商品訂單系統(接口+多態)

場景:訂單可包含多種商品(手機、圖書),需統一計算總價,每種商品有自己的計價邏輯。

// 1. 接口:定義商品的統一行為
interface Product {
    double getPrice(); // 計算價格
    String getName();  // 獲取名稱
}

// 2. 實現類1:手機(封裝屬性和計價邏輯)
class Phone implements Product {
    private String brand;
    private double price;
    private int storage; // 存儲容量(影響價格)

    public Phone(String brand, double price, int storage) {
        this.brand = brand;
        this.price = price + (storage * 100); // 存儲越大價格越高
    }

    @Override
    public double getPrice() { return price; }

    @Override
    public String getName() { return brand + "手機(" + storage + "G)"; }
}

// 3. 實現類2:圖書(封裝屬性和計價邏輯)
class Book implements Product {
    private String title;
    private double price;
    private double discount; // 折扣(影響價格)

    public Book(String title, double price, double discount) {
        this.title = title;
        this.price = price * discount; // 折扣後價格
    }

    @Override
    public double getPrice() { return price; }

    @Override
    public String getName() { return title; }
}

// 4. 訂單類(使用多態統一管理商品)
class Order {
    private Product[] products; // 訂單中的商品(父類數組存子類對象)

    public Order(Product[] products) {
        this.products = products;
    }

    // 計算訂單總價(多態:無需關心具體商品類型)
    public double calculateTotal() {
        double total = 0;
        for (Product p : products) {
            total += p.getPrice();
        }
        return total;
    }

    // 展示訂單商品
    public void showProducts() {
        System.out.println("訂單商品:");
        for (Product p : products) {
            System.out.println(p.getName() + ",單價:" + p.getPrice());
        }
    }
}

// 5. 測試類
public class OrderSystem {
    public static void main(String[] args) {
        // 創建不同商品(多態:統一用Product類型)
        Product p1 = new Phone("小米", 2999, 256); // 價格=2999+256*100=28599
        Product p2 = new Book("Java編程思想", 108, 0.8); // 價格=108*0.8=86.4

        // 生成訂單
        Order order = new Order(new Product[]{p1, p2});
        order.showProducts();
        System.out.println("訂單總價:" + order.calculateTotal()); // 輸出:28685.4
    }
}

這些案例中,封裝保證了數據安全(如私有屬性通過方法訪問),繼承減少了代碼重複(如學生/老師複用人員信息),多態實現了靈活擴展(如同一訂單處理不同商品),完全貼合面向對象的設計思想。