Java - 多型性:初學者指南

你好,未來的Java巫師們!今天,我們將進入一個令人興奮的Java多型性世界。如果這個詞聽起來像是《哈利波特》中的一個咒語,也別擔心 - 當您完成這個教程時,您將能夠像專家一樣操控多型性!

Java - Polymorphism

什麼是多型性?

讓我們從基礎開始。多型性是來自希臘語的一個花哨詞彙,意思是“許多形式”。在Java中,它是一個強大的概念,允許不同類型的對象被視為公共超類別的對象。想像一下,如果您可以把貓、狗和鳥都當作“動物”來對待 - 這就是多型性的本質!

實際世界的類比

想想電視遙控器。它有很多按鈕,每個都有特定的功能。但對您來說,它們只是您可以按下去讓事情發生的“按鈕”。這就是多型性的作用!

Java多型性的類型

Java中有兩種主要的多型性:

  1. 編譯時多型性(靜態綁定)
  2. 執行時多型性(動態綁定)

讓我們詳細探索每一個。

1. 編譯時多型性

這種多型性通過方法重載實現。這就像有許多具有相同名稱但略有不同用途的工具。

示例:

public class 計算機 {
public int 加(int a, int b) {
return a + b;
}

public double 加(double a, double b) {
return a + b;
}

public String 加(String a, String b) {
return a + b;
}
}

在這個例子中,我們有三個方法。Java會根據我們提供的參數類型來知道使用哪一個。這就像我們的計算器上有三個不同的“加”按鈕,每個都用於特定的操作類型。

2. 執行時多型性

這裡才是真正的魔法發生的地方!執行時多型性通過方法覆寫實現。這就像教不同動物發出聲音,但每種動物都有自己獨特的方式。

示例:

class 動物 {
public void 發出聲音() {
System.out.println("動物發出聲音");
}
}

class 狗 extends 動物 {
@Override
public void 發出聲音() {
System.out.println("狗吠:汪!汪!");
}
}

class 貓 extends 動物 {
@Override
public void 發出聲音() {
System.out.println("貓叫:喵!喵!");
}
}

現在,讓我們看看如何使用它:

public class 主程式 {
public static void main(String[] args) {
動物 我的動物 = new 動物();
動物 我的狗 = new 狗();
動物 我的貓 = new 貓();

我的動物.發出聲音(); // 輸出:動物發出聲音
我的狗.發出聲音();    // 輸出:狗吠:汪!汪!
我的貓.發出聲音();    // 輸出:貓叫:喵!喵!
}
}

這不酷嗎?即使我們把它們都聲明為動物,每個對象都根據其實際類別表現出來。這就像有一個通用“發出聲音”按鈕,對每種動物都會有不同的反應!

為什麼使用多型性?

  1. 代碼重用性:寫一次,多次使用!
  2. 靈活性:輕鬆擴展和修改您的代碼。
  3. 易于維護:一處的更改會影響所有相關的類。

虛擬方法和執行時多型性

在Java中,所有非靜態方法默認為“虛擬方法”。這意味著JVM會在運行時根據實際對象類型,而不是引用類型決定調用哪個方法。

示例:

class 形狀 {
public void 繪製() {
System.out.println("繪製一個形狀");
}
}

class 圓形 extends 形狀 {
@Override
public void 繪製() {
System.out.println("繪製一個圓形");
}
}

class 正方形 extends 形狀 {
@Override
public void 繪製() {
System.out.println("繪製一個正方形");
}
}

public class 主程式 {
public static void main(String[] args) {
形狀[] 形狀s = new 形狀[3];
形狀s[0] = new 形狀();
形狀s[1] = new 圓形();
形狀s[2] = new 正方形();

for(形狀 形狀 : 形狀s) {
形狀.繪製();
}
}
}

輸出:

繪製一個形狀
繪製一個圓形
繪製一個正方形

即使我們使用的是一個形狀數組,每個對象的繪製()方法也是根據其實際類型調用的。這就像有一支知道該如何繪製每種形狀的魔法鉛筆!

在Java中實現多型性

要有效地實現多型性:

  1. 使用繼承(extends關鍵字)
  2. 在子類中覆寫方法
  3. 使用超類參考引用子類對象

示例:

class 車輛 {
public void 開始() {
System.out.println("車輛正在啟動");
}
}

class 車 extends 車輛 {
@Override
public void 開始() {
System.out.println("車輛引擎正在怒吼");
}
}

class 電動車 extends 車輛 {
@Override
public void 開始() {
System.out.println("電動車正在安靜地加熱");
}
}

public class 主程式 {
public static void main(String[] args) {
車輛 我的車輛 = new 車輛();
車輛 我的車 = new 車();
車輛 我的電動車 = new 電動車();

我的車輛.開始();
我的車.開始();
我的電動車.開始();
}
}

輸出:

車輛正在啟動
車輛引擎正在怒吼
電動車正在安靜地加熱

在這裡,我們使用同一個開始()方法,但每個車輛都有自己的獨特啟動方式。這就是多型性的美!

結論

多型性一開始可能會顯得複雜,但它是一個強大的工具,可以讓您的Java程序更加靈活且易于維護。請記住,這都是關於以相似的方式對待不同的對象,同時允許它們保持其獨特行為。

持續練習,您將能夠像真正的Java雕塑家一樣塑造您的代碼!編程愉快,未來的Java大師們!

Credits: Image by storyset