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