Java介面
介面
-
介面也是引用數據類型
-
介面是完全抽象的
-
介面中只有常量和抽象方法
-
介面支援多繼承
-
介面里的都是抽象方法,可以省略public,abstract關鍵字
-
介面中的值不能改變
-
一個類實現介面必須實現介面的所有方法
-
抽象類本身就有抽象方法不必全部實現
-
介面中的方法都是public的
註:以上為個人理解,請辯解試學習
介面概念
官方解釋:Java介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
特點
就像一個類一樣,一個介面也能夠擁有方法和屬性,但是在介面中聲明的方法默認是抽象的。(即只有方法標識符,而沒有方法體)。
介面指明了一個類必須要做什麼和不能做什麼,相當於類的藍圖。
一個介面就是描述一種能力,比如「運動員」也可以作為一個介面,並且任何實現「運動員」介面的類都必須有能力實現奔跑這個動作(或者implement move()方法),所以介面的作用就是告訴類,你要實現我這種介面代表的功能,你就必須實現某些方法,我才能承認你確實擁有該介面代表的某種能力。
如果一個類實現了一個介面中要求的所有的方法,然而沒有提供方法體而僅僅只有方法標識,那麼這個類一定是一個抽象類。(必須記住:抽象方法只能存在於抽象類或者介面中,但抽象類中卻能存在非抽象方法,即有方法體的方法。介面是百分之百的抽象類)
一個JAVA庫中介面的例子是:Comparator 介面,這個介面代表了「能夠進行比較」這種能力,任何類只要實現了這個Comparator介面的話,這個類也具備了「比較」這種能力,那麼就可以用來進行排序操作了。
為什麼選擇介面?
介面被用來描述一種抽象。
因為Java不像C++一樣支援多繼承,所以Java可以通過實現介面來彌補這個局限。
介面也被用來實現解耦。
介面被用來實現抽象,而抽象類也被用來實現抽象,為什麼一定要用介面呢?介面和抽象類之間又有什麼區別呢?原因是抽象類內部可能包含非final的變數,但是在介面中存在的變數一定是final,public,static的。
重點
值得注意
- 我們不能直接去實例化一個介面,因為介面中的方法都是抽象的,是沒有方法體的,這樣怎麼可能產生具體的實例呢?但是,我們可以使用介面類型的引用指向一個實現了該介面的對象,並且可以調用這個介面中的方法。因此,上圖中最後的方法調用我們還可以這樣寫:(實際上就是使用了Java中多態的特性)。
- 一個類可以實現不止一個介面。
- 一個類如果要實現某個介面的話,那麼它必須要實現這個介面中的所有方法。
- 介面中所有的方法都是抽象的和public的,所有的屬性都是public,static,final的。
- 介面用來彌補類無法實現多繼承的局限。
- 介面也可以用來實現解耦。
語法
package com.q._interface;
public interface USB {
void print();
}
介面在開發中的作用
介面在開發中的作用類似於多肽在開發中的作用 多肽:
面向對象編程,不要面向具體編程,降低程式的耦合度,提高程式的擴展力。
抽象類和介面的區別
a) 介面描述了方法的特徵,不給出實現,一方面解決 java 的單繼承問題,實現了強大
的可接插性
b) 抽象類提供了部分實現,抽象類是不能實例化的,抽象類的存在主要是可以把公共的
程式碼移植到抽象類中
c) 面向介面編程,而不要面向具體編程(面向抽象編程,而不要面向具體編程)
d) 優先選擇介面(因為繼承抽象類後,此類將無法再繼承,所以會喪失此類的靈活性)