← SEARCHABLE ARCHIVE
Java · 2026-07-26

Java 從基礎到精通 — 第 4 講

將多態性與繼承和介面結合使用

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

當多個物件需要以相同的方式使用時,可以使用介面和繼承。 如果呼叫程式碼依賴必要的角色而不是特定的類,則它更難以更改。

介面

public interface Damageable {
    boolean isAlive();
    void takeDamage(int amount);
}

public final class Monster implements Damageable {
    private int health = 100;

    @Override
    public boolean isAlive() {
        return health > 0;
    }

    @Override
    public void takeDamage(int amount) {
        health = Math.max(0, health - amount);
    }
}

攻擊程式碼是Damageable,而不是Monster。 即使以後添加了可破壞的盒子,也可以用同一個合約來處理。

抽象類別和繼承

public abstract class Skill {
    private final String name;

    protected Skill(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract void execute(Damageable target);
}

抽象類別可以共享公共狀態和實現,同時將一些行為留給其子類別。 繼承也結合了父級的規則,因此如果為了簡單的程式碼重用而使其更深,則更改的範圍會增加。

多態性

List<Damageable> targets = List.of(
    new Monster(),
    new TrainingDummy()
);

for (Damageable target : targets) {
    target.takeDamage(10);
}

即使進行相同的調用,也會執行適合實際物件的實作。 呼叫者不必使用 instanceof 列出所有具體類型。

介面表達角色,抽象類別提供共同的基礎。 如果可以組合小的、可組合的對象,它通常比繼承更簡單。