什麼是介面?如何定義介面?如何實現介面?
在JAVA程式語言中是一個抽象型別,是抽象方法的集合,介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。
如用關鍵字interface,你可以從類的實現中抽象一個類的介面。也就是說,用interface,你可以指定一個類必須做什麼,而不是規定它如何去做。
介面在語句構成上與類相似,但是它們缺少例項變數,而且它們定義的方法是不含方法體的。實際上,這意味著你可以定義不用假設它們怎樣實現的介面。一旦介面被定義,任何類成員可以實現一個介面。而且,一個類可以實現多個介面。
要實現一個介面,介面定義的類必須建立完整的一套方法。然而,每個類都可以自由的決定它們自己實現的細節。通過提供interface關鍵字,Java允許你充分利用多型性的“一個介面,多個方法”。
介面是為支援執行時動態方法解決而設計的。通常,為使一個方法可以在類間呼叫,兩個類都必須出現在編譯時間裡,以便Java編譯器可以檢查以確保方法特殊是相容的。這個需求導致了一個靜態的不可擴充套件的類環境。
在一個系統中不可避免會出現這類情況,函式在類層次中越堆越高以致該機制可以為越來越多的子類可用。介面的設計避免了這個問題。它們把方法或方法系列的定義從類層次中分開。因為介面是在和類不同的層次中,與類層次無關的類實現相同的介面是可行的。這是實現介面的真正原因所在。
介面定義
介面定義很像類定義。下面是一個介面的通用形式:
access interface name {
return-type method-name1(parameter-list);
return-type method-name2(parameter-list);
type final-varname1 = value;
type final-varname2 = value;
// ...
return-type method-nameN(parameter-list);
type final-varnameN = value;
}
這裡,access要麼是public,要麼就沒有用修飾符。當沒有訪問修飾符時,則是預設訪問範圍,而介面是包中定義的惟一的可以用於其他成員的東西。
當它宣告為public時,則介面可以被任何程式碼使用。name是介面名,它可以是任何合法的識別符號。注意定義的方法沒有方法體。它們以引數列表後面的分號作為結束。
它們本質上是抽象方法;在介面中指定的方法沒有預設的實現。每個包含介面的類必需實現所有的方法。
介面宣告中可以宣告變數。它們一般是final 和static型的,意思是它們的值不能通過實現類而改變。它們還必須以常量值初始化。
如果介面本身定義成public ,所有方法和變數都是public的。
下面是一個介面定義的例子。它宣告瞭一個簡單的介面,該介面包含一個帶單個整型引數的callback( )方法。
interface Callback {
void callback(int param);
}
實現介面
一旦介面被定義,一個或多個類可以實現該介面。為實現一個介面,在類定義中包括implements 子句,然後建立介面定義的方法。一個包括implements 子句的類的一般形式如下:
access class classname [extends superclass]
[implements interface [,interface...]] {
// class-body
}
這裡,access要麼是public的,要麼是沒有修飾符的。如果一個類實現多個介面,這些介面被逗號分隔。如果一個類實現兩個宣告瞭同樣方法的介面,那麼相同的方法將被其中任一個介面客戶使用。實現介面的方法必須宣告成public。而且,實現方法的型別必須嚴格與介面定義中指定的型別相匹配。
下面是一個小的實現Callback介面的例子程式:
class Client implements Callback {
// Implement Callback's interface
public void callback(int p) {
System.out.println("callback called with " + p);
}
}
注意callback( )用public 訪問修飾符宣告。
注意:當實現一個介面方法時,它必須宣告成public。
類在實現介面時定義它自己的附加的成員,既是允許的,也是常見的。例如,下面的Client版本實現了callback( )方法,並且增加了nonIfaceMeth( )方法。
class Client implements Callback {
// Implement Callback’s interface
public void callback(int p) {
System.out.println(“callback called with “ + p);
}
void nonIfaceMeth() {
System.out.println(“Classes that implement interfaces “ +
“may also define other members, too.”);
}
}
開課吧小編:介面分享就結束了,下一篇分享通過介面引用實現介面,希望大家能夠喜歡。
相關文章
- 什麼是介面,如何理解
- 介面測試是什麼?如何做好介面測試?
- 介面的定義和實現
- 在Java中是如何定義和宣告介面的?Java
- 【學習】介面是什麼?實現原理的是什麼?
- 如何實現 axios 的自定義介面卡 adapteriOSAPT
- lineout是什麼介面
- 類定義介面
- 介面冪等性如何實現?
- 如何用Redis實現搜尋介面Redis
- 域名檢測介面原理,微信js介面域名該如何實現JS
- ? python 介面自動化 (二)--什麼是介面測試、為什麼要做介面測試 (詳解)Python
- ? python 介面自動化 (一)-- 什麼是介面、介面優勢、型別 (詳解)Python型別
- java中lock介面是什麼Java
- 介面模組的定義
- 什麼是API介面,具體是什麼意思?API
- API介面是什麼?產品經理怎麼去看API介面文件?API
- Retrofit2.5是如何解析在介面類中定義的請求方法?
- 請問大家用什麼工具寫介面文件?如何保證介面文件更新?
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- ts類介面約束定義
- python執行麟遊介面自動化--什麼是介面、介面優勢、型別(詳解)Python型別
- 介面測試怎麼進行,如何做好介面測試
- 什麼是API介面?API介面的用途以及詳細示例說明。API
- 如何使用電商API介面API介面如何應用API
- app安全:如何應對介面劫持、介面劫持如何檢測APP
- 論PHP介面版本控制(如何相容多端介面)PHP
- Go 介面:nil介面為什麼不等於nil?Go
- 如何理解 interface 介面
- 如何呼叫api介面API
- 什麼是Java Marker Interface(標記介面)Java
- 什麼是物理層介面?—Vecloud微雲Cloud
- 代理IP中的API介面是什麼?API
- 介面測試關注點是什麼?
- 如何決定介面設計中顏色
- Golang 學習——如何判斷 Golang 介面是否實現?Golang
- 【抬槓C#】如何實現介面的base呼叫C#
- Java開發筆記(六十二)如何定義函式式介面Java筆記函式