【面試題每日學習】10

1.抽象類中能不能包含方法體?

答:抽象類中能夠包含方法體。抽象類的構成也能夠徹底是包含方法體的普通方法,只不過這樣並非抽象類最優的使用方式。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

2.抽象類能不能被實例化?爲何?

答:抽象類不能被實例化,由於抽象類和接口的設計就是用來規定子類行爲特徵的,就是讓其餘類來繼承,是多態思想的一種設計體現,因此強制規定抽象類不能被實例化。繼承

3.抽象方法能夠被 private 修飾嗎?爲何?

答:抽象方法不能使用 private 修飾,由於抽象方法就是要子類繼承重寫的,若是設置 private 則子類不能重寫此抽象方法,這與抽象方法的設計理念相違背,因此不能被 private 修飾。接口

4.添加如下哪一個選項不會引發編譯器報錯?

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 變量賦值操做必須在方法內。編譯

5.如下關於抽象類和抽象方法說法正確的是?

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.

6.接口和普通類有什麼關係?

答:在 Java 語言設計中,接口不是類,而是對類的一組需求描述,這些類必需要遵循接口描述的統一格式進行定義。

7.接口能不能有方法體?

答:JDK 8 以前接口不能有方法體,JDK 8 以後新增了 static 方法和 default 方法,能夠包含方法體。

8.執行如下代碼會輸出什麼結果?

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。

9.抽象類和接口有什麼區別?

答:抽象類和接口的區別,主要分爲如下幾個部分。

  • 默認方法
  • 抽象類能夠有默認方法的實現
  • JDK 8 以前接口不能有默認方法的實現,JDK 8 以後接口能夠有默認方法的實現
  • 繼承方式
  • 子類使用 extends 關鍵字來繼承抽象類
  • 子類使用 implements 關鍵字類實現接口
  • 構造器
  • 抽象類能夠有構造器
  • 接口不能有構造器
  • 方法訪問修飾符
  • 抽象方法能夠用 public / protected / default 等修飾符
  • 接口默認是 public 訪問修飾符,而且不能使用其餘修飾符
  • 多繼承
  • 一個子類只能繼承一個抽象類
  • 一個子類能夠實現多個接口

10.如下抽象方法描述正確的是?

A:抽象方法能夠是靜態(static)的 B:抽象方法可同時是本地方法(native) C:抽象方法能夠被 synchronized 修飾 D:以上都不是

答:D

題目解析:抽象方法須要被子類重寫,而靜態方法是沒法被重寫的,所以抽象方法不能被靜態(static)修飾;本地方法是由本地代碼實現的方法,而抽象方法沒有實現,因此抽象方法不能同時是本地方法;synchronized 和方法的實現細節有關,而抽象方法不涉及實現細節,所以抽象方法不能被 synchronized 修飾。

相關文章
相關標籤/搜索