答:抽象類中能夠包含方法體。抽象類的構成也能夠徹底是包含方法體的普通方法,只不過這樣並非抽象類最優的使用方式。java
題目解析:包含了方法體的抽象類示例代碼以下:設計
abstract class AbstractAnimal { public void run() { System.out.println("AbstractAnimal Run."); } } class Animal extends AbstractAnimal { public static void main(String[] args) { AbstractAnimal animal = new Animal(); animal.run(); } }
以上代碼執行的結果是: AbstractAnimal Run.
code
答:抽象類不能被實例化,由於抽象類和接口的設計就是用來規定子類行爲特徵的,就是讓其餘類來繼承,是多態思想的一種設計體現,因此強制規定抽象類不能被實例化。繼承
答:抽象方法不能使用 private 修飾,由於抽象方法就是要子類繼承重寫的,若是設置 private 則子類不能重寫此抽象方法,這與抽象方法的設計理念相違背,因此不能被 private 修飾。接口
abstract class AbstractAnimal { static String animalName = "AbstractAnimal"; // 添加代碼處 }
A:protected abstract void eat(); B: void eat(); C:abstract void eat(){}; D:animalName += "Cat";內存
答:A編譯器
題目解析:選項 B 普通方法必須有方法體;選項 C 抽象方法不能有方法體;選項 D 變量賦值操做必須在方法內。編譯
A:抽象類中的方法必須所有爲抽象方法 B: 抽象類中必須包含一個抽象方法 C:抽象類中不能包含普通方法 D:抽象類中的方法能夠所有爲普通方法(包含方法體)class
答:D變量
題目解析:抽象類中能夠沒有方法或者所有爲普通方法,都是容許的,以下代碼所示:
abstract class AbstractAnimal { public void run() { System.out.println("AbstractAnimal Run."); } } class Animal extends AbstractAnimal { public static void main(String[] args) { AbstractAnimal animal = new Animal(); animal.run(); } }
程序執行的結果爲:AbstractAnimal Run.
答:在 Java 語言設計中,接口不是類,而是對類的一組需求描述,這些類必需要遵循接口描述的統一格式進行定義。
答:JDK 8 以前接口不能有方法體,JDK 8 以後新增了 static 方法和 default 方法,能夠包含方法體。
interface IAnimal { static String animalName = "Animal Name"; } class AnimalImpl implements IAnimal { static String animalName = new String("Animal Name"); public static void main(String[] args) { System.out.println(IAnimal.animalName == animalName); } }
答:執行的結果爲 false。
題目解析:子類使用 new String… 從新建立了變量 animalName,又由於使用 == 進行內存地址比較,因此結果就是 false。
答:抽象類和接口的區別,主要分爲如下幾個部分。
A:抽象方法能夠是靜態(static)的 B:抽象方法可同時是本地方法(native) C:抽象方法能夠被 synchronized 修飾 D:以上都不是
答:D
題目解析:抽象方法須要被子類重寫,而靜態方法是沒法被重寫的,所以抽象方法不能被靜態(static)修飾;本地方法是由本地代碼實現的方法,而抽象方法沒有實現,因此抽象方法不能同時是本地方法;synchronized 和方法的實現細節有關,而抽象方法不涉及實現細節,所以抽象方法不能被 synchronized 修飾。