Java - 介面

歡迎,萌芽的程式設計師們!今天,我們將深入Java介面的迷人世界。如果你是程式設計的新手,也別擔心;我會一步一步引導你了解這個概念,就像過去多年教學中,我對無數學生所做的那樣。所以,拿起你最喜歡的飲料,放鬆一下,讓我們一起踏上這段令人興奮的旅程!

Java - Interfaces

Java介面是什麼?

想像一下你正在建造一個機器人(耐心一點,這個類比馬上就會有道理!)。你知道你希望你的機器人能做某些事情,比如移動和發出聲音,但你還不確定它們到底會如何做到這些。在Java中,介面就像是機器人的藍圖。它定義了你的機器人應該能夠做什麼,而不指定它們將如何做到這些。

在程式設計的術語中,介面是一個合約,指定了一組抽象方法,一個類必須實現。這是一種實現抽象並定義多個類可以共享的公共行為的方式。

在Java中聲明介面

讓我們從一個簡單的例子開始。以下是我們如何聲明一個介面:

public interface Robot {
void move();
void makeSound();
}

在這個例子中,我們聲明了一個名為Robot的介面,它有兩個抽象方法:move()makeSound()。注意到這些方法沒有方法體——它們只是聲明。實現此介面的類別將提供這些方法的實際代碼。

Java介面的屬性

在我們繼續之前,讓我們快速概述一下Java介面的一些關鍵屬性:

  1. 介面中的所有方法都是隱式公開和抽象的。
  2. 介面不能直接實例化。
  3. 一個介面可以繼承多個介面。
  4. 介面中的變量是隱式公開、靜態和最終的。

在Java中實現介面

現在我們有了Robot介面,讓我們創建一個實現它的類別。我們將這個類別稱為AndroidRobot

public class AndroidRobot implements Robot {
@Override
public void move() {
System.out.println("Android robot is walking on two legs.");
}

@Override
public void makeSound() {
System.out.println("Android robot says: 'Hello, human!'");
}
}

在這裡,我們使用implements關鍵字來表示我們的AndroidRobot類別正在實現Robot介面。然後我們為move()makeSound()方法提供實現。

讓我們來解析一下:

  1. @Override註解是可選的,但建議使用。它告訴編譯器我們有意要覆寫介面的方法。
  2. 我們為move()makeSound()提供了特定的實現。我們的Android機器人可以兩腿走路並且能夠說Hello!

使用我們的介面和類別

現在,讓我們看看如何使用我們的新介面和類別:

public class RobotDemo {
public static void main(String[] args) {
Robot myRobot = new AndroidRobot();
myRobot.move();
myRobot.makeSound();
}
}

當我們運行這段代碼時,我們將看到:

Android robot is walking on two legs.
Android robot says: 'Hello, human!'

注意到我們聲明myRobotRobot(介面)類型,但實例化為AndroidRobot。這是介面的一個強大功能——我們可以對介面編程,而不是實現。這使得我們的代碼更加靈活,並且在未來更容易更改。

繼承Java介面

就像類別一樣,介面可以繼承其他介面。這允許我們創建更專業的介面。讓我們創建一個更先進的機器人介面:

public interface AdvancedRobot extends Robot {
void fly();
void swim();
}

現在,任何實現AdvancedRobot的類別都必須為move()makeSound()fly()swim()提供實現。

介面實現多繼承

與只能擴展一個超類的類別不同,介面可以繼承多個介面。這是Java提供多繼承形式的一種方式。以下是一個例子:

public interface Flying {
void takeOff();
void land();
}

public interface Swimming {
void dive();
void surface();
}

public interface AmphibiousRobot extends Robot, Flying, Swimming {
void transformMode();
}

實現AmphibiousRobot的類別將需要為RobotFlyingSwimmingAmphibiousRobot中的所有方法提供實現。

介面中的默認方法

從Java 8開始,介面可以有默認方法——具有默認實現的方法。這個功能是為了允許在不破壞現有實現的情況下向介面添加新方法。以下是一個例子:

public interface ModernRobot {
void process();

default void boot() {
System.out.println("Booting up...");
process();
System.out.println("Boot complete!");
}
}

實現ModernRobot的類別必須實現process(),但它會免費獲得boot()。如果它們想這樣做,它可以覆寫boot(),但它們不必這麼做。

函數式介面

函數式介面是包含正好一個抽象方法的介面。這些對Java的lambda表達式非常重要。以下是一個例子:

@FunctionalInterface
public interface Calculator {
int calculate(int a, int b);
}

我們可以使用這個介面與lambda表達式這樣:

Calculator add = (a, b) -> a + b;
System.out.println(add.calculate(5, 3));  // 輸出:8

結論

哇!今天我們講解了很多內容。從基本的介面聲明到函數式介面,現在您已經對Java介面有了堅實的基礎。請記住,介面是Java程式設計中的一個強大工具。它們允許我們定義公共行為,實現一種多繼承的形式,並撰寫更靈活和可維護的代碼。

當您繼續您的Java旅程時,您會發現介面到處都是。它們在Java的標準庫和在許多設計模式中被廣泛使用。所以請持續練習,很快您就能像專家一樣使用介面!

編程愉快,未來的Java大師們!??‍??‍?

Credits: Image by storyset