網(wǎng)站加載頁(yè)模板太倉(cāng)seo網(wǎng)站優(yōu)化軟件
1、抽象類和接口的定義:
(1)抽象類主要用來抽取子類的通用特性,作為子類的模板,它不能被實(shí)例化,只能被用作為子類的超類。
(2)接口是抽象方法的集合,聲明了一系列的方法操作,如果一個(gè)類實(shí)現(xiàn)了某個(gè)接口,那么它必須實(shí)現(xiàn)這個(gè)接口的所有抽象方法。
2、抽象類與接口的區(qū)別:
(1)抽象類和接口都用于抽象化具體對(duì)象的,都不能直接實(shí)例化,但是兩者的側(cè)重點(diǎn)不同:抽象類主要用來抽象類型,表示這個(gè)對(duì)象是什么;接口主要用來抽象功能,表示這個(gè)對(duì)象能做什么;
(2)接口可以看成抽象類的變體,所有方法都是抽象的,因此接口只能做方法的聲明,不能有方法的實(shí)現(xiàn);而抽象類可以有默認(rèn)的方法實(shí)現(xiàn),既可以做方法的聲明,也可以做方法的實(shí)現(xiàn);
如果往抽象類中添加新的方法,可以給他提供默認(rèn)的實(shí)現(xiàn),因此可以不需要改變子類的代碼;如果往接口中添加方法,那么必須改變實(shí)現(xiàn)該接口的類(JDK8 之后,接口也可以有默認(rèn)的實(shí)現(xiàn))
(3)接口可以繼承多個(gè)接口,抽象類不可以多繼承類,但可以單繼承類或多實(shí)現(xiàn)接口。
(4)抽象方法和接口函數(shù)都不能使用static修飾。抽象方法的訪問修飾符可以是public、protected和default,不能是private;接口的默認(rèn)訪問修飾符為public,不能使用其他修飾符。
(5)接口的變量只能是不可變常量,默認(rèn)修飾符都是public static final;但是抽象類的變量可以是普通變量
(6)抽象類可以有構(gòu)造器,接口不能有構(gòu)造器。
(7)接口實(shí)現(xiàn)類必須實(shí)現(xiàn)接口中的所有聲明的方法,但抽象類的子類可以部分實(shí)現(xiàn)父類的抽象方法,但如果子類不能全部實(shí)現(xiàn)抽象方法,那么該子類只能是抽象類;
(8)與正常Java類的相比,抽象類除了不能實(shí)例化之外,和正常Java類沒有任何區(qū)別,但接口和正常Java類是完全不同的類型。
(9)抽象類和接口是Java語(yǔ)言中兩種不同的抽象概念,他們的存在對(duì)多態(tài)提供了非常好的支持,雖然他們之間存在很大的相似性。抽象類的功能遠(yuǎn)遠(yuǎn)超過接口,但是定義抽象類的代價(jià)比較高。因?yàn)槊總€(gè)類只能繼承一個(gè)類。因此,在這個(gè)抽象類中,你必須編寫出其子類的所有共性。雖然接口在功能上會(huì)弱化很多,但是他只是針對(duì)一組動(dòng)作的描述,而且可以在一個(gè)類中同時(shí)實(shí)現(xiàn)多個(gè)接口,因此在設(shè)計(jì)階段會(huì)降低難度。
3、分別在哪些地方使用抽象類和接口?
(1)當(dāng)你關(guān)注一個(gè)事物的本質(zhì)時(shí),使用抽象類;當(dāng)你關(guān)注一組操作的時(shí)候,使用接口。
(2)如果擁有一些方法并且想讓他們中有一些默認(rèn)的是實(shí)現(xiàn),那么可以使用抽象類。
(3)如果想實(shí)現(xiàn)多重繼承,那必須使用接口。由于Java不支持多繼承,子類不能夠繼承多類,但是可以實(shí)現(xiàn)多個(gè)接口。
(4)如果基本功能在不斷改變,那么就需要使用抽象類,如果不斷改變基本功能并且使用接口,那么就需要改變所有實(shí)現(xiàn)了該接口的類。
四、總結(jié)
1、 抽象類在java語(yǔ)言中所表示的是一種繼承關(guān)系,一個(gè)子類只能存在一個(gè)父類,但是可以存在多個(gè)接口。
2、 在抽象類中可以擁有自己的成員變量和非抽象類方法,但是接口中只能存在靜態(tài)的不可變的成員數(shù)據(jù)(不過一般都不在接口中定義成員數(shù)據(jù)),而且它的所有方法都是抽象的。
3、抽象類和接口所反映的設(shè)計(jì)理念是不同的,抽象類所代表的是“is-a”的關(guān)系,而接口所代表的是“l(fā)ike-a”的關(guān)系
抽象類和接口是java語(yǔ)言中兩種不同的抽象概念,他們的存在對(duì)多態(tài)提供了非常好的支持,雖然他們之間存在很大的相似性。但是對(duì)于他們的選擇往往反應(yīng)了您對(duì)問題域的理解。只有對(duì)問題域的本質(zhì)有良好的理解,才能做出正確、合理的設(shè)計(jì)。