【Java面試題】60 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? 抽象類中是否可以有靜態的main方法?

接口可以繼承接口。抽象類可以實現(implements)接口,抽象類可以繼承具體類。抽象類中可以有靜態的main方法。

1.抽象類是否可繼承實體類 (concrete class)

答:抽象類是可以繼承實體類,但前提是實體類必須有明確的構造函數。其實Object就是個實體類,Java的API文檔里,每個抽象類的條目里都明確寫著直接或間接繼承自Object,所以這點是沒有疑問的。關鍵在于實體類必須有明確的構造函數
如下:

public class A {
    public static void main(String[] args) {
        
    }
}

abstract class B extends A {
}

編譯通過,也可以運行。這里沒有寫A的構造方法,那么為什么抽象類B依然可以繼承實體類,這是因為系統默認為A寫了無參的構造方法。
如果將A的構造方法,手動定義為private,那么B將無法繼承自A,如下:

public class A {
    private A() {
    }

    public static void main(String[] args) {

    }
}

abstract class B extends A {
}

此時B就不能繼承A。

2.抽象類中是否可以有靜態的main方法?

可以
如下:

abstract class A{
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

可以輸出hello,說明抽象類可以有main方法。

總結:

抽象類:
  • 抽象類不能用來實例化對象,聲明抽象類的唯一目的是為了將來對該類進行擴充。
  • 一個類不能同時被 abstract 和 final 修飾。如果一個類包含抽象方法,那么該類一定要聲明為抽象類,否則將出現編譯錯誤。
  • 抽象類可以包含抽象方法和非抽象方法。
抽象方法:
  • 抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。
  • 抽象方法不能被聲明成 final 和 static。
  • 任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類。
  • 如果一個類包含若干個抽象方法,那么該類必須聲明為抽象類。抽象類可以不包含抽象方法。
  • 抽象方法的聲明以分號結尾,例如:public abstract sample();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容