Java接口:
總結了4點關於JAVA中接口存在的意義:
1、重要性:在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向對象能力。
2、簡單、規范性:如果一個項目比較龐大,那么就需要一個能理清所有業務的架構師來定義一些主要的接口,這些接口不僅告訴開發人員你需要實現那些業務,而且也將命名規范限制住了(防止一些開發人員隨便命名導致別的程序員無法看明白)。
3、維護、拓展性:比如你要做一個畫板程序,其中里面有一個面板類,主要負責繪畫功能,然后你就這樣定義了這個類。
可是在不久將來,你突然發現這個類滿足不了你了,然后你又要重新設計這個類,更糟糕是你可能要放棄這個類,那么其他地方可能有引用他,這樣修改起來很麻煩。
如果你一開始定義一個接口,把繪制功能放在接口里,然后定義類時實現這個接口,然后你只要用這個接口去引用實現它的類就行了,以后要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
4、安全、嚴密性:接口是實現軟件松耦合的重要手段,它描敘了系統對外的所有服務,而不涉及任何具體的實現細節。這樣就比較安全、嚴密一些(一般軟件服務商考慮的比較多)。
那么什么是接口呢?
接口是一種能力
1:接口的命名規則與類型不同。如果修飾符是public。則該接口在整個項目中可見 ,如果省略修飾符 則該接口只能在該包可見
2:接口中可以定義常量,不能定義變量,接口中的屬性都會自動用public static final修飾,即接口中的屬性都是全局靜態常量,接口中的常量必須在定義時指定初始值
3:接口中所有的方法抽象方法。接口中的方法都會自動用public abstract修飾。即接口中只有全局抽象方法,
4:和抽象類一樣,接口不能被實例化,接口中不能有狗構造方法
5:接口之間可以通過extends 實現繼承關系,一個接口可以繼承多個接口。但接口不能繼承類
6:接口的實現類必須實現接口的全部方法,否則必須定義為抽象類
7:一個類只能有一個直接父類,但可以通過implements實現多個接口,當雷在繼承父類的同時有實現了多個接口時,extends關鍵字必須位於implements關鍵字之前
接口的注意事項:
01.接口不能實例化,因為接口是比抽象類抽象程度更高的類型
02一個類如果實現了某個接口,必須重寫該接口中的所有方法
03.接口不能有構造,但是抽象類可以有
04.接口中所有方法都公有的抽象方法
05.接口中的所有字段必須都是公有的靜態常量
06.接口本身也是一種數據類型
07.接口只是為實現它的類定義了規范,保證實現類方法簽名和接口中對應方法一致。
08.通過接口可以實現多繼承
09.一個借口中最好只定義一個方法,防止接口污染
java中接口的特點:
1. 接口中的方法,永遠都被public來修飾
2. 接口中沒有構造方法,也不能實例化接口對象
3. 接口中只有方法的聲明,沒有方法體
4. 接口中只有常量,如果定義變量,在編譯的時候都會默認加上“public static final”
5. 接口中定義的方法都需要實現類來實現,如果實現類不能實現接口中的所有方法,則實現類需要定義為抽象類
6. 靜態方法不能被子類重寫(覆蓋),因此接口中不定聲明靜態方法
7. 使用接口可以實現多繼承
抽象類:
抽象類就是不能使用new方法進行實例化的類(不能被實例化,可以有多個抽象方法),即沒有具體實例對象的類,抽象類有點類似於“模板”的作用,目的是根據其格式來創建和修改新的類,對象不能由抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象,當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract,在抽象類中的成員方法可以包括一般方法和抽象方法
抽象類的關鍵字:abstract
abstract 關鍵字,和哪些關鍵字不能共存?
final:被final修飾的類不能有子類。而被abstract修飾的類一定是一個父類。
private: 抽象類中的私有的抽象方法,不被子類所知,就無法被復寫。
而抽象方法出現的就是需要被復寫。
static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調用就可以了
java中抽象類的特點:
1. 如果一個類中有抽象方法,那么這個類一定是抽象類
2. 抽象類中不一定有抽象方法
3. 抽象類中可以存在抽象方法
4. 抽象類中可以存在構造方法
5. 抽象類中可以存在普通屬性、方法、靜態屬性和靜態方法
6. 抽象類中的抽象方法需要有子類實現,如果子類不實現,則子類也需要定義為抽象的
7,抽象方法和抽象類都必須被abstract關鍵字修飾。
8,抽象類不可以用new創建對象。因為調用抽象方法沒意義
9:抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法
接口和抽象類的區別之處:
1. 接口中所有的方法隱含都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法
2. 類可以實現很多個接口,但是只能繼承一個抽象類
3. 類可以不實現抽象類和接口聲明的所有方法,在這種情況下,類也必須得聲明成是抽象的
4. 抽象類可以在不提供接口方法實現的情況下實現接口
5. java接口中聲明的變量默認都是final的,抽象類可以包含非final變量
6. java接口中的成員函數默認都是public的,抽象類中的成員函數可以是private,protected或者是public的
7. 接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是如果它包含main方法的話是可以被調用的
8:抽象類中可以有普通方法,接口中不能。
9:抽象類可以有構造,接口不能
10:抽象類中可以有普通字段,而接口中不行
11:抽象類不能實現多繼承,接口可以
12:符合isa關系的選用抽象類,符合hasa關系的選用接口比抽象類抽象程度更高