[面試原題]面試
[博爲峯題目] 選項中哪一行代碼能夠替換題目中//add code here而不產生編譯錯誤?()設計
A public abstract void method(int a);code
B constInt = constInt + 5;對象
C public int method();繼承
D public abstract void anotherMethod() {}接口
[正確答案]get
A編譯
[面試技術解析]class
博爲峯小博老師:變量
抽象類遵循的原則
(1)abstract關鍵字只能修飾類和方法,不能修飾字段。
(2)抽象類不能被實例化(沒法使用new關鍵字建立對象實例),只能被繼承。
(3)抽象類能夠包含屬性,方法,構造方法,初始化塊,內部類,枚舉類,和普通類同樣,普通方法必定要實現,變量能夠初始化或不初始化但不能初始化後在抽象類中從新賦值或操做該變量(只能在子類中改變該變量)。
(4)抽象類中的抽象方法(加了abstract關鍵字的方法)不能實現。
(5)含有抽象方法的類必須定義成抽象類。
[技術擴展]
抽象類和接口的區別
(1)接口是公開的,裏面不能有私有的方法或變量,是用於讓別人使用的,而抽象類是能夠有私有方法或私有變量的。
(2)abstract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。可是,一個類卻能夠實現多個interface,實現多重繼承。接口還有標識(裏面沒有任何方法,如Remote接口)和數據共享(裏面的變量全是常量)的做用。
(3)在abstract class 中能夠有本身的數據成員,也能夠有非abstarct的成員方法,而在interface中,只可以有靜態的不能被修改的數據成員(也就是必須是 static final的,不過在 interface中通常不定義數據成員),全部的成員方法默認都是 public abstract 類型的。
(4)abstract class和interface所反映出的設計理念不一樣。其實abstract class表示的是"is-a"關係,interface表示的是"has-a"關係。
(5)實現接口的必定要實現接口裏定義的全部方法,而實現抽象類能夠有選擇地重寫須要用到的方法,通常的應用裏,最頂級的是接口,而後是抽象類實現接口,最後纔到具體類實現。抽象類中能夠有非抽象方法。接口中則不能有實現方法。
(6)接口中定義的變量默認是public static final 型,且必須給其初值,因此實現類中不能從新定義,也不能改變其值。抽象類中的變量默認是 friendly 型,其值能夠在子類中從新定義,也能夠在子類中從新賦值。