1.接口與抽象類(lèi)的區(qū)別(都不能被實(shí)例化)
一個(gè)子類(lèi)只能繼承一個(gè)抽象類(lèi)肚邢,但能實(shí)現(xiàn)多個(gè)接口
方法:
抽象類(lèi)可以沒(méi)有抽象方法,它可以有普通方法,可以有靜態(tài)方法擒抛。而接口中必須都是抽象方法狮斗,不能有靜態(tài)方法鳍寂。
變量常量:
抽象類(lèi)中可以定義常量,變量(且訪問(wèn)類(lèi)型任意)情龄。而接口中只能定義常量迄汛。(public static final )接口中必須要有具體的實(shí)現(xiàn)才有意義,所以為public骤视;接口中的數(shù)據(jù)對(duì)所有實(shí)現(xiàn)類(lèi)只有一份鞍爱,所以為static;接口中的常量只讀不改专酗,才能為實(shí)現(xiàn)接口的對(duì)象提供一個(gè)統(tǒng)一屬性睹逃,所以用final。
構(gòu)造方法:
因?yàn)樗鼈兌疾荒鼙粚?shí)例化祷肯,接口沒(méi)有構(gòu)造方法沉填,但是抽象類(lèi)可以有構(gòu)造方法,
2.為什么抽象類(lèi)和接口中不能有靜態(tài)的抽象方法佑笋?
抽象類(lèi)不能實(shí)例化翼闹,即不能被分配內(nèi)存。而靜態(tài)方法在類(lèi)的實(shí)例化之前就被分配了內(nèi)存蒋纬。所以出現(xiàn)了矛盾猎荠。
定義抽象方法的目的是重寫(xiě)此方法,而靜態(tài)方法不能被重寫(xiě)(編譯時(shí)就已經(jīng)被確定了)蜀备。
3.抽象類(lèi)可以繼承普通類(lèi)关摇,但前提是普通類(lèi)必須有明確的構(gòu)造函數(shù)。(構(gòu)造函數(shù)不能私有)
普通類(lèi)也可以繼承抽象類(lèi)碾阁,對(duì)于抽象類(lèi)的非抽象方法输虱,可以選擇性覆寫(xiě)。但不能覆寫(xiě)靜態(tài)方法脂凶。
4.抽象類(lèi)可以繼承抽象類(lèi)
(如果一個(gè)子類(lèi)沒(méi)有實(shí)現(xiàn)抽象父類(lèi)的所有抽象方法宪睹,那么該子類(lèi)須定義為abstract類(lèi)型)