- 含有abstract修飾符的class即為抽象類(lèi),abstract 類(lèi)不能創(chuàng)建實(shí)例對(duì)象。含有abstract方法的類(lèi)必須定義為abstract class,abstract class類(lèi)中的方法不必是抽象的。abstract class類(lèi)中定義抽象方法必須在具體(Concrete)子類(lèi)中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果子類(lèi)沒(méi)有實(shí)現(xiàn)抽象父類(lèi)中的所有抽象方法,那么子類(lèi)也必須定義為abstract類(lèi)型。
- 接口(interface)可以說(shuō)成是抽象類(lèi)的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類(lèi)型,接口中的成員變量類(lèi)型默認(rèn)為public static final。
下面比較一下兩者的語(yǔ)法區(qū)別:
1.抽象類(lèi)要被子類(lèi)繼承,接口要被類(lèi)實(shí)現(xiàn)。
2.抽象類(lèi)中可以作方法聲明,也可以做方法實(shí)現(xiàn),接口只能做方法聲明。
3.抽象類(lèi)可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
4.抽象類(lèi)中可以有普通成員變量,接口中沒(méi)有普通成員變量
5.抽象類(lèi)中可以作方法聲明,也可以做方法實(shí)現(xiàn),接口只能做方法聲明。
6.抽象類(lèi)中的變量是普通變量,接口里定義的變量只能是公共的靜態(tài)的常量。
7.抽象類(lèi)中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法
8.抽象類(lèi)中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
9.抽象類(lèi)是重構(gòu)的結(jié)果,接口是設(shè)計(jì)的結(jié)果。
10.一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。
11.抽象類(lèi)可以有具體的方法和屬性,接口只能有抽象方法和不可變常量。
12.抽象類(lèi)和接口都是用來(lái)抽象具體對(duì)象的,但是接口的抽象級(jí)別最高。
13.抽象類(lèi)主要用來(lái)抽象類(lèi)別,接口主要用來(lái)抽象功能。
14.抽象類(lèi)和接口中都可以包含靜態(tài)成員變量,抽象類(lèi)中的靜態(tài)成員變量的訪問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是public static final類(lèi)型,并且默認(rèn)即為public static final類(lèi)型。