Java - 封印類別與介面
大家好,未來的 Java 開發者們!今天,我們將進入一個令人興奮的旅程,探索 Java 中的封印類別與介面。如果你是編程新手,不必擔心 - 我們會從基礎開始,逐步進階。所以,拿起一杯咖啡(或你喜歡的飲料),我們一起深入探討吧!
什麼是封印類別與介面?
想像一下,你正在建造一個樹屋,並希望控制誰可以為其添加房間。這就是 Java 中封印類別和介面所做的 - 它們允許你控制哪些類別可以繼承或實現它們。這就像為你的代碼擁有一個 VIP 名單一樣!
封印類別解決的問題
在我們有封印類別之前,任何類都可以繼承你的類別或實現你的介面。這就像舉辦一個派對,卻不知道誰會出現!封印類別為你提供了這份賓客清單的控制。
如何創建封印類別
讓我們從一個簡單的例子開始:
public sealed class Animal permits Dog, Cat, Bird {
// Animal 類別的代碼在這裡
}
在這個例子中,Animal
是我們的封印類別。permits
關鍵字就是我們的安保人員,只允許Dog
、Cat
和Bird
類別繼承Animal
。
繼承封印類別
現在,讓我們看看如何創建繼承我們Animal
類別的類:
public final class Dog extends Animal {
// Dog 類別的代碼在這裡
}
public final class Cat extends Animal {
// Cat 類別的代碼在這裡
}
public non-sealed class Bird extends Animal {
// Bird 類別的代碼在這裡
}
注意關鍵字final
和non-sealed
。這些非常重要:
-
final
:這意味著類別不能被進一步繼承。這就像說,“派對在這裡結束!” -
non-sealed
:這允許類別被任何其他類別繼承。這就像說,“進來吧,越多越歡迎!”
封印介面
就像類別一樣,介面也可以被封印。這裡有一個例子:
public sealed interface Vehicle permits Car, Motorcycle, Bicycle {
// Vehicle 介面的代碼在這裡
}
以下是實現此介面的方式:
public final class Car implements Vehicle {
// Car 類別的代碼在這裡
}
public final class Motorcycle implements Vehicle {
// Motorcycle 類別的代碼在這裡
}
public non-sealed class Bicycle implements Vehicle {
// Bicycle 類別的代碼在這裡
}
為何使用封印類別與介面?
- 類型安全:你知道哪些類別可以繼承或實現你的封印類別或介面。
- 更好的設計:它幫助你創建一個更有結構性和意的類別階層。
- 模式匹配:它與switch語句中的模式匹配配合得天衣無縫(這是另一天的話題,但相信我,這很酷!)。
實際案例
讓我們創建一個更複雜的例子。想像我們正在建立一個具有不同類型角色的簡單遊戲:
public sealed abstract class GameCharacter permits Warrior, Mage, Archer {
protected String name;
protected int health;
public GameCharacter(String name, int health) {
this.name = name;
this.health = health;
}
public abstract void attack();
}
public final class Warrior extends GameCharacter {
public Warrior(String name) {
super(name, 100);
}
@Override
public void attack() {
System.out.println(name + " 挥舞著強大的劍!");
}
}
public final class Mage extends GameCharacter {
public Mage(String name) {
super(name, 75);
}
@Override
public void attack() {
System.out.println(name + " 呪咒了一個強大的法術!");
}
}
public non-sealed class Archer extends GameCharacter {
public Archer(String name) {
super(name, 80);
}
@Override
public void attack() {
System.out.println(name + " 射出了一支精準的箭!");
}
}
在這個例子中,我們創建了一個封印抽象類別GameCharacter
,並有三個允許的子類別:Warrior
、Mage
和Archer
。每個子類別都有自己的attack()
方法的實現。
讓我們看看如何使用這些類別:
public class Game {
public static void main(String[] args) {
GameCharacter[] characters = {
new Warrior("Conan"),
new Mage("Gandalf"),
new Archer("Legolas")
};
for (GameCharacter character : characters) {
character.attack();
}
}
}
當你運行這段代碼時,你會看到:
Conan 挥舞著強大的劍!
Gandalf 呪咒了一個強大的法術!
Legolas 射出了一支精準的箭!
結論
封印類別與介面是 Java 中強大的工具,可以讓你創建有更多控制且有意圖的類別階層。它們就像你代碼的安保人員,確保只有正確的類別能夠加入派對!
記住,編程就是解決問題和創建結構。封印類別和介面只是你工具箱中的另一個工具,幫助你编写更乾淨、更易維護的代碼。
持續練習,持續編碼,最重要的是,玩得開心!在你意識到之前,你將能夠像專家一樣封印類別。直到下次,編程愉快!
方法 | 描述 |
---|---|
permits |
指定哪些類別可以繼承封印類別或實現封印介面 |
sealed |
声明一個類別或介面為封印 |
non-sealed |
允許封印類別的子類別被任何類別繼承 |
final |
防止類別被進一步繼承 |
Credits: Image by storyset