當一些人談到繼承的Java OOP 範式時,他們通常指的是用一個繼承者擴展一個父類,一個子類。然而,當您遇到 Java implements 關鍵字時,這意味著我們進入了另一個抽象級別並開始使用 Java 中的接口。我們將討論接口是什麼、它們的用途以及實現是如何發生的。
什麼是接口和實現
您可能多次聽說過“接口”這個詞。例如,計算機有輸入接口(鼠標和鍵盤),許多程序都有用戶界面。從廣義上講,接口是兩個交互方之間的鏈接。例如,相同的鍵盤或電視遙控器。在編程中,尤其是在 Java 中,接口是一個特定的契約,它說明實現它的類將做什麼。接口僅定義行為。它沒有說明將實現它的對象。您可以像這樣在 Java 中聲明一個接口:
public interface MyInterface {
// constants declaration
// methods without implementation
// static methods
// default methods (default)
// private methods
}
下面是Java 中 Implements 的語法:
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
接口描述行為而不指定它。例如,“運動”等行為可以應用於不同類型的對象:自行車、人、汽車、河水等。游泳的行為可以是鴨子、船或魚的行為。除了可以移動或游泳之外,這些物體沒有任何共同點。是的,游泳的運動非常不同。但是,在 Java 中,您可以創建Duck、Boat、Fish類並讓它們實現游泳的能力。這是使用 Java Implements關鍵字的地方。
實施關鍵字示例
public interface Swimmable {
void moveForward();
void TurnRight();
void TurnLeft();
}
如您所見,方法本身並未實現。但是我們聲明實現這個接口的類必須能直線游動,也能左右轉。讓我們創建將實現此接口的類。
public class Duck implements Swimmable {
//implementing the methods
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
}
public class Fish implements Swimmable {
public void moveForward() {
System.out.println("I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft() {
System.out.println("I am turning left...");
}
public void turnUp(){
System.out.println("I am turning up...");
}
public void turnDown(){
System.out.println("I am turning down...");
}
public void Stop() {
System.out.println("I am relaxing somewhere under the water surface...");
}
}
根據約定,所有實現Swimmable接口的類都必須能夠向前遊(實現 moveForward ()方法),以及向右和向左轉。需要實施這些方法。鴨子和魚游的方式不同。假設一條魚有兩個額外的方法來實現它向上和向下游動的能力。Swimmable 接口沒有這個。但是,如果我們創建 Fish 類的子類,例如 Tuna 或 Salmon,它們就像所有“Fish”一樣,能夠上下游動。
Java 中的多個接口
您可能已經知道,Java 不支持多重繼承。這意味著一個類只能從一個超類繼承。然而在某種程度上你仍然可以在 Java 中使用“多重繼承”,因為一個類可以實現多個接口。
To implement multiple interfaces, use the next syntax:
interface MyFirstInterface {
public void myMethod();
}
interface MySecondInterface {
public void myOtherMethod();
}
// MyClass implements both MyFirstInterface and MySecondInterface
class MyClass implements MyFirstInterface, MySecondInterface {
public void myMethod() {
//method implementation
}
public void myOtherMethod() {
//method implementation
}
}
多接口示例
請記住,鴨子不僅會游泳,還會飛。讓我們編寫飛行接口並在我們的鴨子中實現它。
public interface Flyable {
double startAge = 0.1;
void fly();
}
public class Duck implements Swimmable, Flyable {
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
public void fly(){
System.out.println("I am flying!!!");
}
}
同樣,重要的是要記住我們為什麼要編寫界面。比方說,如果由鳥、飛機、跳傘者和蒲公英來實現,它們的飛行將完全不同。
GO TO FULL VERSION