“你好,阿米戈!今天你要有一些發現。今天的主題——請敲鼓——是接口。

“是的。今天太棒了,我要回家洗澡了。”

一個接口是抽象和多態性的孩子。接口非常像一個抽像類,其中所有方法都是抽象的。它的聲明方式與類相同,但使用關鍵字。以下是一些示例:interface

代碼 描述和事實
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
class1)我們寫代替單詞interface

2)它只包含抽象方法(無需添加抽像一詞)。

3)事實上,接口上的所有方法都是公共的。

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
一個接口只能繼承其他接口。

您可以有多個父接口。

class abstract ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
一個類可以繼承多個接口(而且只能繼承一個類)。為了顯示這種繼承,我們使用關鍵字 implements

該類ChessItem 被聲明為抽像類:它實現了除 draw 之外的所有繼承方法。

換句話說,ChessItem 包含一個抽象方法:  draw().

“有趣。但為什麼我們需要接口?什麼時候使用它們?”

“與類相比,接口有兩個強大的優勢:”

1) 從方法實現中分離“方法定義”。

我之前告訴過你,如果你想讓其他類調用你類的方法,那麼你需要將它們標記為public. 如果您希望某些方法只能從您自己的類中調用,則必須將它們標記為private。換句話說,我們將類的方法分為兩類:«for everybody» 和 «just for me»。

我們可以使用接口來進一步加強這種分離。我們將創建一個特殊的“為所有人開設的班級”,該班級將繼承第二個“專為我開設的班級”。這看起來像這樣:

class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName()
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
public static void main(String[] args)
{
 Student student =
               new Student("Alibaba");
 System.out.println(student.getName());
}
public static void main(String[] args)
{
 Student student =
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

我們將我們的類分成兩部分:一個接口一個實現該接口的類。

“那有什麼好處呢?”

“相同的接口可以由(繼承)不同的類來實現。並且每個類可以有自己的行為。就像ArrayListLinkedList 是 List 接口的兩種不同實現。

因此,我們不僅隱藏了不同的實現,還隱藏了包含這些實現的類(我們可以在代碼中的任何地方使用接口)。這使我們可以在程序運行時非常靈活地用其他對象替換一些對象,在不知道使用它的任何類的情況下更改對象的行為。

結合多態性,這是一個非常強大的技術。目前,我們為什麼需要這樣做還遠未明了。您必須首先遇到由數十個或數百個類組成的程序,才能體會接口如何極大地簡化您的生活。

2)多重繼承。

在 Java 中,每個類只能有一個父類。在其他編程語言中,類通常可以有多個父類。這很方便,但也帶來了很多問題。

Java 提供了一種折衷方案:  您不能繼承多個類,但可以實現多個接口。 一個接口可以有多個父接口。 一個類可以實現多個接口,只能繼承一個父類。