接口 public interface 接口名{} class 類 implements 接口 {}

1.1 接口概念
接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。
接口只描述所應該具備的方法,并沒有具體實現,具體的實現由接口的實現類(相當于接口的子類)來完成。這樣將功能的定義與實現分離,優化了程序設計。
請記住:一切事物均有功能,即一切事物均有接口。
1.2 接口的定義
與定義類的class不同,接口定義時需要使用interface關鍵字。
定義接口所在的仍為.java文件,雖然聲明時使用的為interface關鍵字的編譯后仍然會產生.class文件。這點可以讓我們將接口看做是一種只包含了功能聲明的特殊類。
定義格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}

使用interface代替了原來的class,其他步驟與定義類相同:
? 接口中的方法均為公共訪問的抽象方法
? 接口中無法定義普通的成員變量
1.3 類實現接口
類與接口的關系為實現關系,即類實現接口。實現的動作類似繼承,只是關鍵字不同,實現使用implements。
其他類(實現類)實現接口后,就相當于聲明:”我應該具備這個接口中的功能”。實現類仍然需要重寫方法以實現具體的功能。
格式:
class 類 implements 接口 {
重寫接口中方法
}
在類實現接口后,該類就會將接口中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯。
? 接口中定義功能,當需要具有該功能時,可以讓類實現該接口,只聲明了應該具備該方法,是功能的聲明。
? 在具體實現類中重寫方法,實現功能,是方法的具體實現。
于是,通過以上兩個動作將功能的聲明與實現便分開了。(此時請重新思考:類是現實事物的描述,接口是功能的集合。)
1.4 接口中成員的特點
1、接口中可以定義變量,但是變量必須有固定的修飾符修飾,public static final 所以接口中的變量也稱之為常量,其值不能改變。后面我們會講解static與final關鍵字
2、接口中可以定義方法,方法也有固定的修飾符,public abstract
3、接口不可以創建對象。
4、子類必須覆蓋掉接口中所有的抽象方法后,子類才可以實例化。否則子類是一個抽象類。

interface Demo { ///定義一個名稱為Demo的接口。
public static final int NUM = 3;// NUM的值不能改變
public abstract void show1();
public abstract void show2();
}

//定義子類去覆蓋接口中的方法。類與接口之間的關系是 實現。通過 關鍵字 implements
class DemoImpl implements Demo { //子類實現Demo接口。
//重寫接口中的方法。
public void show1(){}
public void show2(){}
}
1.5 接口的多實現
了解了接口的特點后,那么想想為什么要定義接口,使用抽象類描述也沒有問題,接口到底有啥用呢?
接口最重要的體現:解決多繼承的弊端。將多繼承這種機制在java中通過多實現完成了。
interface Fu1
{
void show1();
}

interface Fu2
{
void show2();
}
class Zi implements Fu1,Fu2// 多實現。同時實現多個接口。
{
public void show1(){}
public void show2(){}
}
怎么解決多繼承的弊端呢?
弊端:多繼承時,當多個父類中有相同功能時,子類調用會產生不確定性。
其實核心原因就是在于多繼承父類中功能有主體,而導致調用運行時,不確定運行哪個主體內容。
為什么多實現能解決了呢?
因為接口中的功能都沒有方法體,由子類來明確。
1.6 類繼承類同時實現接口
接口和類之間可以通過實現產生關系,同時也學習了類與類之間可以通過繼承產生關系。當一個類已經繼承了一個父類,它又需要擴展額外的功能,這時接口就派上用場了。
子類通過繼承父類擴展功能,通過繼承擴展的功能都是子類應該具備的基礎功能。如果子類想要繼續擴展其他類中的功能呢?這時通過實現接口來完成。
class Fu {
public void show(){}
}
interface Inter {
pulbic abstract void show1();
}
class Zi extends Fu implements Inter {
public void show1() {
}
}
接口的出現避免了單繼承的局限性。父類中定義的事物的基本功能。接口中定義的事物的擴展功能。
1.7 接口的多繼承
學習類的時候,知道類與類之間可以通過繼承產生關系,接口和類之間可以通過實現產生關系,那么接口與接口之間會有什么關系。
多個接口之間可以使用extends進行繼承。
interface Fu1{
void show();
}
interface Fu2{
void show1();
}
interface Fu3{
void show2();
}
interface Zi extends Fu1,Fu2,Fu3{
void show3();
}
在開發中如果多個接口中存在相同方法,這時若有個類實現了這些接口,那么就要實現接口中的方法,由于接口中的方法是抽象方法,子類實現后也不會發生調用的不確定性。
1.8 接口的思想
前面學習了接口的代碼體現,現在來學習接口的思想,接下里從生活中的例子進行說明。
舉例:我們都知道電腦上留有很多個插口,而這些插口可以插入相應的設備,這些設備為什么能插在上面呢?主要原因是這些設備在生產的時候符合了這個插口的使用規則,否則將無法插入接口中,更無法使用。發現這個插口的出現讓我們使用更多的設備。
總結:接口在開發中的它好處
1、接口的出現擴展了功能。
2、接口其實就是暴漏出來的規則。
3、接口的出現降低了耦合性,即設備與設備之間實現了解耦。

接口的出現方便后期使用和維護,一方是在使用接口(如電腦),一方在實現接口(插在插口上的設備)。例如:筆記本使用這個規則(接口),電腦外圍設備實現這個規則(接口)。

1.9 接口和抽象的區別
明白了接口思想和接口的用法后,接口和抽象類的區別是什么呢?接口在生活體現也基本掌握,那在程序中接口是如何體現的呢?
通過實例進行分析和代碼演示抽象類和接口的用法。
1、舉例:
犬:
行為:
吼叫;
吃飯;
緝毒犬:
行為:
吼叫;
吃飯;
緝毒;

2、思考:
由于犬分為很多種類,他們吼叫和吃飯的方式不一樣,在描述的時候不能具體化,也就是吼叫和吃飯的行為不能明確。當描述行為時,行為的具體動作不能明確,這時,可以將這個行為寫為抽象行為,那么這個類也就是抽象類。
可是當緝毒犬有其他額外功能時,而這個功能并不在這個事物的體系中。這時可以讓緝毒犬具備犬科自身特點的同時也有其他額外功能,可以將這個額外功能定義接口中。
如下代碼演示:
interface 緝毒{
public abstract void 緝毒();
}
//定義犬科的這個提醒的共性功能
abstract class 犬科{
public abstract void 吃飯();
public abstract void 吼叫();
}
// 緝毒犬屬于犬科一種,讓其繼承犬科,獲取的犬科的特性,
//由于緝毒犬具有緝毒功能,那么它只要實現緝毒接口即可,這樣即保證緝毒犬具備犬科的特性,也擁有了緝毒的功能
class 緝毒犬 extends 犬科 implements 緝毒{

public void 緝毒() {
}
void 吃飯() {
}
void 吼叫() {
}

}
class 緝毒豬 implements 緝毒{
public void 緝毒() {
}
}

3、通過上面的例子總結接口和抽象類的區別:
相同點:
? 都位于繼承的頂端,用于被其他類實現或繼承;
? 都不能直接實例化對象;
? 都包含抽象方法,其子類都必須覆寫這些抽象方法;
區別:
? 抽象類為部分方法提供實現,避免子類重復實現這些方法,提高代碼重用性;接口只能包含抽象方法;
? 一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個接口;(接口彌補了Java的單繼承)
? 抽象類是這個事物中應該具備的你內容, 繼承體系是一種 is..a關系
? 接口是這個事物中的額外內容,繼承體系是一種 like..a關系

二者的選用:
? 優先選用接口,盡量少用抽象類;
? 需要定義子類的行為,又要為子類提供共性功能時才選用抽象類;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 1 場景問題# 1.1 發送提示消息## 考慮這樣一個實際的業務功能:發送提示消息。基本上所有帶業務流程處理的系統...
    七寸知架構閱讀 5,088評論 5 63
  • 通常情況下,大家換工作都是采用“騎驢找馬”的形式,就是在離職之前找好下一家再離職,這樣做穩妥沒風險,而且讓工作之間...
    瀞知閱讀 503評論 2 1
  • According to the xinhua News Agency,the food wasted by ch...
    xiaochouwa閱讀 1,200評論 0 1