Java - 繼承:初學者指南
你好,未來的Java巫師們!今天,我們將開啟一個激動人心的Java繼承世界之旅。如果你是編程新手,不必擔心——我將成為你的友好導遊,逐步解釋一切。所以,拿一杯咖啡(或者茶,如果你喜歡),讓我們一起深入了解一下!
繼承是什麼?
想象一下你在創建一個家族樹。你可能會注意到孩子從父母那裡繼承了某些特徵——也許是你父親的眼睛或是你母親的笑容。嗯,Java中的繼承類似於此,但使用的是類而不是家庭成员!
繼承是面向對象編程(OOP)中的一個基本概念,它允許一個新的類基於一個現有的類。新的類從現有的類繼承字段和方法。
為什麼我們需要繼承?
- 代碼重用性:我們可以重用現有的代碼,而不是反覆编写同一代碼。
- 改進組織:它有助於創建清晰且邏輯的類階層。
- 方法覆寫:我們可以修改繼承方法的行為。
讓我們通過一個簡單的例子來更好地理解這一點。
實現Java繼承
在Java中,我們使用extends
關鍵字來實現繼承。這裡有一個基本結構:
class 父類 {
// 父類成員
}
class 子類 extends 父類 {
// 子類成員
}
現在,讓我們看看一個更具体的例子:
class 動物 {
void eat() {
System.out.println("這個動物吃食物");
}
}
class 狗 extends 動物 {
void bark() {
System.out.println("這個狗會叫");
}
}
public class 繼承示例 {
public static void main(String[] args) {
狗 myDog = new 狗();
myDog.eat(); // 從動物繼承
myDog.bark(); // 在狗中定義
}
}
在這個例子中,狗
正在從動物
繼承eat()
方法。當我們運行此程序時,我們將看到:
這個動物吃食物
這個狗會叫
這不很棒嗎?我們的狗
類現在有動物
的eat()
方法和自己的bark()
方法!
'super'關鍵字
現在,如果我們想在子類中引用父類呢?這就是super
關鍵字派上用場的地方。這就像在你需要幫助時給你的父母打電話一樣!
讓我們修改我們的例子:
class 動物 {
void eat() {
System.out.println("這個動物吃食物");
}
}
class 狗 extends 動物 {
void eat() {
super.eat(); // 呼叫動物的eat()方法
System.out.println("這個狗吃狗食");
}
}
public class Super關鍵字示例 {
public static void main(String[] args) {
狗 myDog = new 狗();
myDog.eat();
}
}
當我們運行此程式時,我們將看到:
這個動物吃食物
這個狗吃狗食
super
關鍵字允許我們在添加自己的行為之前調用動物
類的eat()
方法。
呼叫父類構造器
super
關鍵字也可以用來調用父類的構造器。這在你想初始化繼承的字段時特別有用。
class 動物 {
String 名稱;
動物(String 名稱) {
this.名稱 = 名稱;
}
}
class 狗 extends 動物 {
String 品種;
狗(String 名稱, String 品種) {
super(名稱); // 呼叫動物的構造器
this.品種 = 品種;
}
void 顯示() {
System.out.println("我的名字是 " + 名稱 + " 我是一隻 " + 品種);
}
}
public class 構造器繼承示例 {
public static void main(String[] args) {
狗 myDog = new 狗("巴迪", "金毛尋回犬");
myDog.顯示();
}
}
這將輸出:
我的名字是 巴迪 我是一隻 金毛尋回犬
IS-A 關係
繼承在類之間建立了一個"IS-A"關係。在我們的例子中,我們可以說"一條狗IS-A動物"。這種關係是理解繼承的基礎。
'instanceof' 關鍵字
Java提供了instanceof
關鍵字來檢查一個對象是否是特定類或接口的實例。這就像問:"嘿,你是這個家庭的一部分嗎?"
public class Instanceof示例 {
public static void main(String[] args) {
動物 myAnimal = new 動物();
狗 myDog = new 狗();
System.out.println(myAnimal instanceof 動物); // true
System.out.println(myDog instanceof 動物); // true
System.out.println(myAnimal instanceof 狗); // false
}
}
HAS-A 關係
當繼承表示"IS-A"關係時,組合表示"HAS-A"關係。例如,一輛車HAS-A引擎。
class 引擎 {
void start() {
System.out.println("引擎已啟動");
}
}
class 車 {
private 引擎 引擎;
車() {
this.引擎 = new 引擎();
}
void start車() {
引擎.start();
System.out.println("車子準備好了!");
}
}
public class 組合示例 {
public static void main(String[] args) {
車 myCar = new 車();
myCar.start車();
}
}
Java繼承的類型
Java支持多種類型的繼承:
- 單繼承:一個類從一個超類繼承。
- 多層繼承:一個類從一個類繼承,而該類又從另一個類繼承。
- 層次繼承:多個類從一個單一的超類繼承。
Java不支持類的多重繼承(一個類從多個類繼承),以避免含糊性。但是,它通過接口支持多重繼承。
以下是繼承類型的摘要表:
繼承類型 | 描述 | Java中是否支持 |
---|---|---|
單繼承 | 一個類從一個超類繼承 | 是 |
多層繼承 | 一個類從一個類繼承,該類又從另一個類繼承 | 是 |
層次繼承 | 多個類從一個單一的超類繼承 | 是 |
多重繼承 | 一個類從多個類繼承 | 否(但可以通過接口實現) |
就這樣,各位!我們已經涵蓋了Java繼承的基本知識。記住,練習使完美,所以不要猶豫去嘗試這些概念。編程愉快,願繼承與你同在!
Credits: Image by storyset