java 抽象類(lèi)和接口區(qū)別 接口和抽象類(lèi)的主要區(qū)別?
接口和抽象類(lèi)的主要區(qū)別?Java提供和支持創(chuàng)建抽象類(lèi)和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:接口中所有的方法隱含的都是抽象的。抽象類(lèi)則可以同時(shí)包含抽象和非抽象的方法。類(lèi)可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承
接口和抽象類(lèi)的主要區(qū)別?
Java提供和支持創(chuàng)建抽象類(lèi)和接口。
它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:接口中所有的方法隱含的都是抽象的。抽象類(lèi)則可以同時(shí)包含抽象和非抽象的方法。類(lèi)可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類(lèi)類(lèi)如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類(lèi)可以不實(shí)現(xiàn)抽象類(lèi)聲明的所有方法,當(dāng)然,在這種情況下,類(lèi)也必須得聲明成是抽象的。抽象類(lèi)可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。Java接口中聲明的變量默認(rèn)都是final的。抽象類(lèi)可以包含非final的變量。Java接口中的成員函數(shù)默認(rèn)是public的。抽象類(lèi)的成員函數(shù)可以是private,protected或者是public。接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類(lèi)也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。也可以參考JDK8中抽象類(lèi)和接口的區(qū)別
抽象接口和接口的區(qū)別?
1、抽象類(lèi)和接口都不能直接實(shí)例化。如果要實(shí)例化,抽象類(lèi)變量必須指向?qū)崿F(xiàn)所有抽象方法的子類(lèi)對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類(lèi)對(duì)象。
2、抽象類(lèi)要被子類(lèi)繼承,接口要被類(lèi)實(shí)現(xiàn)。
3、接口只能做方法申明,抽象類(lèi)中可以做方法申明,也可以做方法實(shí)現(xiàn)
4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類(lèi)中的變量是普通變量。
5、抽象類(lèi)里的抽象方法必須全部被子類(lèi)所實(shí)現(xiàn),如果子類(lèi)不能全部實(shí)現(xiàn)父類(lèi)抽象方法,那么該子類(lèi)只能是抽象類(lèi)。
同樣,實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法,那么該類(lèi)也只能為抽象類(lèi)。
6、抽象方法只能申明,不能實(shí)現(xiàn)。
7、抽象類(lèi)里可以沒(méi)有抽象方法
8、如果一個(gè)類(lèi)里有抽象方法,那么這個(gè)類(lèi)只能是抽象類(lèi)
9、抽象方法要被實(shí)現(xiàn),所以不能是靜態(tài)的,也不能是私有的。
10、接口可以繼承接口,并且可多繼承接口,但類(lèi)只能單一繼承。
11.接口可以通過(guò)匿名內(nèi)部類(lèi)實(shí)例化。