Java - 繼承:初學者指南

你好,未來的Java巫師們!今天,我們將開啟一個激動人心的Java繼承世界之旅。如果你是編程新手,不必擔心——我將成為你的友好導遊,逐步解釋一切。所以,拿一杯咖啡(或者茶,如果你喜歡),讓我們一起深入了解一下!

Java - Inheritance

繼承是什麼?

想象一下你在創建一個家族樹。你可能會注意到孩子從父母那裡繼承了某些特徵——也許是你父親的眼睛或是你母親的笑容。嗯,Java中的繼承類似於此,但使用的是類而不是家庭成员!

繼承是面向對象編程(OOP)中的一個基本概念,它允許一個新的類基於一個現有的類。新的類從現有的類繼承字段和方法。

為什麼我們需要繼承?

  1. 代碼重用性:我們可以重用現有的代碼,而不是反覆编写同一代碼。
  2. 改進組織:它有助於創建清晰且邏輯的類階層。
  3. 方法覆寫:我們可以修改繼承方法的行為。

讓我們通過一個簡單的例子來更好地理解這一點。

實現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支持多種類型的繼承:

  1. 單繼承:一個類從一個超類繼承。
  2. 多層繼承:一個類從一個類繼承,而該類又從另一個類繼承。
  3. 層次繼承:多個類從一個單一的超類繼承。

Java不支持類的多重繼承(一個類從多個類繼承),以避免含糊性。但是,它通過接口支持多重繼承。

以下是繼承類型的摘要表:

繼承類型 描述 Java中是否支持
單繼承 一個類從一個超類繼承
多層繼承 一個類從一個類繼承,該類又從另一個類繼承
層次繼承 多個類從一個單一的超類繼承
多重繼承 一個類從多個類繼承 否(但可以通過接口實現)

就這樣,各位!我們已經涵蓋了Java繼承的基本知識。記住,練習使完美,所以不要猶豫去嘗試這些概念。編程愉快,願繼承與你同在!

Credits: Image by storyset