“你好,阿米戈!今天你要有一些發現。今天的主題——請敲鼓——是接口。 ”
“是的。今天太棒了,我要回家洗澡了。”
“一個接口是抽象和多態性的孩子。接口非常像一個抽像類,其中所有方法都是抽象的。它的聲明方式與類相同,但使用關鍵字。以下是一些示例:interface
”
代碼 | 描述和事實 |
---|---|
|
class 1)我們寫代替單詞interface 。
2)它只包含抽象方法(無需添加抽像一詞)。 3)事實上,接口上的所有方法都是公共的。 |
|
一個接口只能繼承其他接口。
您可以有多個父接口。 |
|
一個類可以繼承多個接口(而且只能繼承一個類)。為了顯示這種繼承,我們使用關鍵字 implements 。
該類 換句話說, |
“有趣。但為什麼我們需要接口?什麼時候使用它們?”
“與類相比,接口有兩個強大的優勢:”
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());
}
我們將我們的類分成兩部分:一個接口和一個實現該接口的類。
“那有什麼好處呢?”
“相同的接口可以由(繼承)不同的類來實現。並且每個類可以有自己的行為。就像ArrayList和LinkedList 是 List 接口的兩種不同實現。 ”
因此,我們不僅隱藏了不同的實現,還隱藏了包含這些實現的類(我們可以在代碼中的任何地方使用接口)。這使我們可以在程序運行時非常靈活地用其他對象替換一些對象,在不知道使用它的任何類的情況下更改對象的行為。
結合多態性,這是一個非常強大的技術。目前,我們為什麼需要這樣做還遠未明了。您必須首先遇到由數十個或數百個類組成的程序,才能體會接口如何極大地簡化您的生活。
2)多重繼承。
在 Java 中,每個類只能有一個父類。在其他編程語言中,類通常可以有多個父類。這很方便,但也帶來了很多問題。
Java 提供了一種折衷方案: 您不能繼承多個類,但可以實現多個接口。 一個接口可以有多個父接口。 一個類可以實現多個接口,只能繼承一個父類。
GO TO FULL VERSION