java中抽象類和接口的區(qū)別 接口和抽象類的主要區(qū)別?
接口和抽象類的主要區(qū)別?Java提供并支持抽象類和接口的創(chuàng)建。它們有一些共同點(diǎn),但區(qū)別在于接口中的所有方法都是抽象的。抽象類可以包含抽象方法和非抽象方法。類可以實(shí)現(xiàn)許多接口,但它只能繼承一個(gè)抽象類。如
接口和抽象類的主要區(qū)別?
Java提供并支持抽象類和接口的創(chuàng)建。
它們有一些共同點(diǎn),但區(qū)別在于接口中的所有方法都是抽象的。抽象類可以包含抽象方法和非抽象方法。類可以實(shí)現(xiàn)許多接口,但它只能繼承一個(gè)抽象類。如果一個(gè)類要實(shí)現(xiàn)一個(gè)接口,它必須實(shí)現(xiàn)接口聲明的所有方法。但是,一個(gè)類不能實(shí)現(xiàn)一個(gè)抽象類聲明的所有方法。當(dāng)然,在這種情況下,類也必須聲明為抽象的。抽象類可以實(shí)現(xiàn)接口而不提供接口方法實(shí)現(xiàn)。默認(rèn)情況下,java接口中聲明的變量是final。抽象類可以包含非最終變量。java接口中的成員函數(shù)默認(rèn)為public。抽象類成員函數(shù)可以是私有的、受保護(hù)的或公共的。接口是絕對(duì)抽象的,不能實(shí)例化。抽象類不能實(shí)例化,但如果它包含main方法,則可以調(diào)用它。您還可以參考jdk8中抽象類和接口之間的區(qū)別
1。抽象類和接口不能直接實(shí)例化。要實(shí)例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對(duì)象。
2. 抽象類應(yīng)由子類繼承,接口應(yīng)由類實(shí)現(xiàn)。
3. 接口只能做方法聲明,抽象類可以做方法聲明,也可以做方法實(shí)現(xiàn)
4。接口中定義的變量只能是公共靜態(tài)常量,抽象類中的變量是普通變量。
5. 抽象類中的抽象方法都必須由子類實(shí)現(xiàn)。如果子類不能完全實(shí)現(xiàn)父類的抽象方法,那么子類只能是一個(gè)抽象類。
同樣,在實(shí)現(xiàn)接口時(shí),如果不是所有接口方法都可以實(shí)現(xiàn),則類只能是抽象類。
6. 抽象方法只能聲明,不能實(shí)現(xiàn)。
7. 抽象類不能有抽象方法
8。如果一個(gè)類有抽象方法,那么這個(gè)類只能是抽象類
9。抽象方法應(yīng)該被實(shí)現(xiàn),所以它不能是靜態(tài)的或私有的。
10. 接口可以繼承接口,也可以繼承多個(gè)接口,但類只能繼承單個(gè)接口。
11. 接口可以通過(guò)匿名內(nèi)部類實(shí)例化。
抽象接口和接口的區(qū)別?
1. 抽象類可以有構(gòu)造方法,但接口不能。
2. 抽象類中可以有普通成員變量,但接口中沒(méi)有普通成員變量
3。抽象類可以包含靜態(tài)方法,但接口不能包含靜態(tài)方法
4。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但它只能繼承一個(gè)抽象類。
5. 接口可以多次實(shí)現(xiàn),抽象類只能單獨(dú)繼承
6。如果抽象類實(shí)現(xiàn)接口,接口中的方法可以作為抽象方法映射到抽象類,而不需要實(shí)現(xiàn),接口中的方法可以在抽象類的子類中實(shí)現(xiàn)