摘要:接口的對象可以利用子類對象的向上轉型進行實例化賦值。接口文件保存在結尾的文件中,文件名使用接口名。接口相應的字節碼文件必須在與包名稱相匹配的目錄結構中。接口不能包含成員變量,除了全局常量定義。
概念
接口,在JAVA編程語言中是一個引用類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。
接口中只能包含抽象方法和全局常量。
接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來聲明一個變量,他們可以成為一個空指針,或是被綁定在一個以此接口實現的對象。
接口的聲明語法格式如下:
[訪問修飾符] interface 接口名稱 [extends 其他的接口名] { // 聲明全局常量 (static final變量) // 抽象方法 }
接口有以下特性:
接口是隱式抽象的,當聲明一個接口的時候,不必使用abstract關鍵字。
接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract關鍵字。
接口中的方法都是公有的(public),public也可以省略。
接口的子類可以通過implements關鍵字實現多個接口。
接口的子類(如果不是抽象類)必須覆寫接口中的全部抽象方法。
接口的對象可以利用子類對象的向上轉型進行實例化賦值。
接口與類相似點:
一個接口可以有多個方法。
接口文件保存在 .java 結尾的文件中,文件名使用接口名。
接口的字節碼文件保存在 .class 結尾的文件中。
接口相應的字節碼文件必須在與包名稱相匹配的目錄結構中。
接口與類的區別:
接口不能用于實例化對象。
接口沒有構造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了全局常量(static final定義)。
接口不是被類繼承了,而是要被類實現。
接口支持多繼承,可以使用extends繼承多個接口。
示例
interface A { public void print(); } interface B { public void get(); } class X implements A,B{ public void print(){ System.out.println("A接口的抽象方法"); } public void get(){ System.out.println("B接口的抽象方法"); } } public class testDemo { public static void main(String[] args) { /* X x = new X(); A a = x; //向上轉型 B b = x; //向上轉型 b.get(); */ A a = new X(); B b = (B)a; b.get(); System.out.println(a instanceof A); System.out.println(a instanceof B); System.out.println(a instanceof X); } } 輸出結果: B接口的抽象方法 true true true
總結:不要被引用變量所代表的類型所迷惑,而要看具體該引用變量所指向的實例對象(new 創建出來的類型)。
實際開發中接口的核心作用定義不同層之間的操作標準,即定義一個標準。
表示一種操作能力,這種情況下,接口里可能不包含任何方法。
將服務端的遠程方法暴露給客戶端。
抽象類和接口的對比抽象類和接口在使用形式上非常類似.
區別點 | 抽象類 | 接口 |
---|---|---|
關鍵字 | abstract class | interface |
組成 | 構造方法、普通方法、抽象方法、static方法、常量、變量 | 抽象方法、全局常量 |
子類使用 | class 子類 extends 抽象類 | class 子類 implement 接口1,接口2,... |
關系 | 抽象類可以實現多個接口 | 接口不能繼承抽象類,可以繼承多個父接口 |
權限 | 抽象類可以使用各種權限 | 接口只能使用public |
繼承限制 | 單繼承 | 多繼承,子類可以實現多個接口 |
子類 | 子類都必須重寫全部的抽象方法 | 同抽象類 |
實例化 | 無法直接實例化,依靠子類對象的向上轉型進行對象的實例化 | 同抽象類 |
如果你擁有一些方法并且想讓它們中的一些有默認實現,那么使用抽象類吧。
如果你想實現多重繼承,那么你必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個類,但可以實現多個接口。因此你就可以使用接口來解決它。
如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現了該接口的類。
當extends和implement同時使用時,extends要放在前面。
Java8中的默認方法和靜態方法Oracle已經開始嘗試向接口中引入普通方法和靜態方法(static),以此來減少抽象類和接口之間的差異。現在,我們可以為接口提供默認實現的方法了并且不用強制子類來實現它。
jdk1.8 允許在接口里面定義普通方法,但普通方法必須使用default修飾。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73550.html
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:能否聲明一個內容為空的接口可以。能否將接口聲明為不允許,這樣做會導致編譯錯誤。當異常沒有被捕獲時,會發生什么當前線程所在的線程組會執行一個叫的方法,最后程序會異常退出。非靜態內部類可以使用哪些修飾符非靜態內部類可以使用或修飾符。 原文地址 http://www.instanceofjava.com/2014/12/core-java-interview-questions.html 1...
摘要:目錄介紹問題匯總具體問題好消息博客筆記大匯總年月到至今,包括基礎及深入知識點,技術博客,學習筆記等等,還包括平時開發中遇到的匯總,當然也在工作之余收集了大量的面試題,長期更新維護并且修正,持續完善開源的文件是格式的同時也開源了生活博客,從年 目錄介紹 00.Java問題匯總 01.具體問題 好消息 博客筆記大匯總【16年3月到至今】,包括Java基礎及深入知識點,Android技...
摘要:一旦異常被拋出,就表明錯誤已無法挽回,也不能回來繼續執行。這種在編譯時被強制檢查的異常稱為被檢查的異常。通過獲取原始異常。構造器對于在構造階段可能會拋出異常,并要求清理的類,最安全的做法是使用嵌套的子句。 點擊進入我的博客 Java異常處理的目的在于通過使用少于目前數量的代碼來簡化大型、可靠的程序的生成,并且通過這種方式可以使你更自信:你的應用中沒有未處理的錯誤。 12.1 概念 異...
閱讀 2027·2021-11-08 13:14
閱讀 2935·2021-10-18 13:34
閱讀 2021·2021-09-23 11:21
閱讀 3582·2019-08-30 15:54
閱讀 1752·2019-08-30 15:54
閱讀 2918·2019-08-29 15:33
閱讀 2569·2019-08-29 14:01
閱讀 1940·2019-08-29 13:52