1、抽象類(lèi)里面可以有非抽象方法,但接口里只能有抽象方法,
聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽像類(lèi)(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現(xiàn)該類(lèi)的情況。不能創(chuàng)建abstract 類(lèi)的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類(lèi)型是一個(gè)抽像類(lèi),并讓它指向具體子類(lèi)的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽像方法提供實(shí)現(xiàn),否則它們也是抽像類(lèi)為。取而代之,在子類(lèi)中實(shí)現(xiàn)該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現(xiàn)這些方法。
2、接口(interface)是抽像類(lèi)的變體。在接口中,所有方法都是抽像的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類(lèi)相似,除了該實(shí)現(xiàn)類(lèi)不能從接口定義中繼承行為。當(dāng)類(lèi)實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類(lèi)的任何對(duì)像上調(diào)用接口的方法。由于有抽像類(lèi),它允許使用接口名作為引用變量的類(lèi)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類(lèi)型或從接口類(lèi)型轉(zhuǎn)換,instanceof運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口。
對(duì)比:
一個(gè)類(lèi)可以有多個(gè)接口 只能有繼承一個(gè)父類(lèi)。
抽象類(lèi)可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
抽象類(lèi)中可以有普通成員變量,接口中沒(méi)有普通成員變量。
接口里邊全部方法都必須是abstract的 抽象類(lèi)的可以有實(shí)現(xiàn)了的方法。
抽象類(lèi)中的抽象方法的訪問(wèn)類(lèi)型可以是public,protected 但接口中的抽象方法只能是public類(lèi)型的,
tb并且默認(rèn)即為public abstract類(lèi)型。
抽象類(lèi)中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法。
抽象類(lèi)和接口中都可以包含靜態(tài)成員變量,抽象類(lèi)中的靜態(tài)成員變量的訪問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是public static final類(lèi)型,并且默認(rèn)即為public static final類(lèi)型。