java接口和抽象类的区别和作用
java接口和抽象類的區(qū)別和作用
接口(英文:Interface),在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過(implements)接口的方式,從而來實現(xiàn)接口的抽象方法。接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對象的屬性和方法。接口則包含類要實現(xiàn)的方法。除非實現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。接口無法被實例化(因為它不是類 有未實現(xiàn)的方法跟虛擬機的機制有關),但是可以被實現(xiàn)。一個實現(xiàn)接口的類,必須實現(xiàn)接口內所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來聲明一個變量,他們可以成為一個空指針,或是被綁定在一個以此接口實現(xiàn)的對象。
JAVA中接口存在的意義:
? ? 1、重要性:在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由于這兩種機制的存在,才賦予了Java強大的 面向對象能力。
2、簡單、規(guī)范性:如果一個項目比較龐大,那么就需要一個能理清所有業(yè)務的架構師來定義一些主要的接口,這些接口不僅告訴開發(fā)人員你需要實現(xiàn)那些業(yè)務,而且也將命名規(guī)范限制住了(防止一些開發(fā)人員隨便命名導致別的程序員無法看明白)。
3、維護、拓展性:比如你要做一個畫板程序,其中里面有一個面板類,主要負責繪畫功能,然后你就這樣定義了這個類。
? ? ? ? ?可是在不久將來,你突然發(fā)現(xiàn)這個類滿足不了你了,然后你又要重新設計這個類,更糟糕是你可能要放棄這個類,那么其他地方可能有引用他,這樣修改起來很麻煩。
? ? ? ? ?如果你一開始定義一個接口,把繪制功能放在接口里,然后定義類時實現(xiàn)這個接口,然后你只要用這個接口去引用實現(xiàn)它的類就行了,以后要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
4、安全、嚴密性:接口是實現(xiàn)軟件松耦合的重要手段,它描敘了系統(tǒng)對外的所有服務,而不涉及任何具體的實現(xiàn)細節(jié)。這樣就比較安全、嚴密一些(一般軟件服務商考慮的比較多)。
接口的特點:
1:接口的命名規(guī)則與類型不同。如果修飾符是public。則該接口在整個項目中可見 ,如果省略修飾符 則該接口只能在該包可見
2:接口中可以定義常量,不能定義變量,接口中的屬性都會自動用public static final修飾,即接口中的屬性都是全局靜態(tài)常量,接口中的常量必須在定義時指定初始值
3:接口中所有的方法抽象方法。接口中的方法都會自動用public abstract修飾。即接口中只有全局抽象方法,
4:和抽象類一樣,接口不能被實例化,接口中不能有狗構造方法
5:接口之間可以通過extends 實現(xiàn)繼承關系,一個接口可以繼承多個接口。但接口不能繼承類
6:接口的實現(xiàn)類必須實現(xiàn)接口的全部方法,否則必須定義為抽象類
7:一個類只能有一個直接父類,但可以通過implements實現(xiàn)多個接口,當雷在繼承父類的同時有實現(xiàn)了多個接口時,extends關鍵字必須位于implements關鍵字之前
注:JDK 1.8 以后,接口里可以有靜態(tài)方法和方法體了。
接口與類的區(qū)別:
- 接口不能用于實例化對象。
- 接口沒有構造方法。
- 接口中所有的方法必須是抽象方法。
- 接口不能包含成員變量,除了 static 和 final 變量。
- 接口不是被類繼承了,而是要被類實現(xiàn)。接口也不能繼承類 接口間可以多繼承多實現(xiàn),類是先繼承父類后再實現(xiàn)接口
- 接口支持多繼承。
抽象類:
抽象類就是不能使用new方法進行實例化的類(不能被實例化,可以有多個抽象方法),即沒有具體實例對象的類,抽象類有點類似于“模板”的作用,目的是根據其格式來創(chuàng)建和修改新的類,對象不能由抽象類直接創(chuàng)建,只可以通過抽象類派生出新的子類,再由其子類來創(chuàng)建對象,當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract,在抽象類中的成員方法可以包括一般方法和抽象方法
java抽象類的作用
1.通過繼承它實現(xiàn)多態(tài),后期綁定,可以為將來要實現(xiàn)的東西做好接口,實現(xiàn)重用性。
2.接口就是更純粹的抽象類
java中抽象類的特點:
1. 如果一個類中有抽象方法,那么這個類一定是抽象類
?2. 抽象類中不一定有抽象方法
?3. 抽象類中可以存在抽象方法
?4. 抽象類中可以存在構造方法
?5. 抽象類中可以存在普通屬性、方法、靜態(tài)屬性和靜態(tài)方法
?6. 抽象類中的抽象方法需要有子類實現(xiàn),如果子類不實現(xiàn),則子類也需要定義為抽象的
7,抽象方法和抽象類都必須被abstract關鍵字修飾。
8,抽象類不可以用new創(chuàng)建對象。因為調用抽象方法沒意義
9:抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法
接口和抽象類的區(qū)別之處:
1. 接口中所有的方法隱含都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法(除了靜態(tài)方法和靜態(tài)方法體)
2. 類可以實現(xiàn)很多個接口,但是只能繼承一個抽象類
3. 類可以不實現(xiàn)抽象類和接口聲明的所有方法,在這種情況下,類也必須得聲明成是抽象的
4. 抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口
5. java接口中聲明的變量默認都是final的,抽象類可以包含非final變量
6. java接口中的成員函數默認都是public的,抽象類中的成員函數可以是private,protected或者是public的
7. 接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是如果它包含main方法的話是可以被調用的
8:抽象類中可以有普通方法,接口中不能。
9:抽象類可以有構造,接口不能
10:抽象類中可以有普通字段,而接口中不行
11:抽象類不能實現(xiàn)多繼承,接口可以
12:符合isa關系的選用抽象類,符合hasa關系的選用接口比抽象類抽象程度更高
?
總結
以上是生活随笔為你收集整理的java接口和抽象类的区别和作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php TCPDF 输出表格到pdf
- 下一篇: python考核试题及答案