面試題:Java中 介面 和 抽象類 的區別
阿新 • • 發佈:2022-05-17
介面 和 抽象類 定義
抽象類:如果多個類中包含相同的行為,但行為發出的動作不一樣,這時可以進行上層的抽象,抽象出一層功能定義,即抽象方法,但沒有對應的功能實現。抽象方法包含在被 abstract
修飾的類中即抽象類。它具有如下特點
-
被
abstract
修飾的方法稱為抽象方法,抽象方法只有方法宣告沒有方法體- 注意:抽象類是為了繼承重寫抽象方法的,所以抽象類不能用
final
修飾。同時外部抽象類不允許使用 static 宣告,而內部的抽象類可以使用 static 宣告(繼承的時候使用“外部類.內部類”的形式表示類名稱)
- 注意:抽象類是為了繼承重寫抽象方法的,所以抽象類不能用
-
抽象類可以包含屬性、方法、構造方法,但構造方法不能用來例項化物件,只能被子類呼叫
- 抽象類中的構造方法,其存在目的是為了抽象類的屬性初始化
- 注意:子類物件例項化時,先執行父類構造器,再執行子類構造器
- 抽象類不能被例項化,只能被繼承
- 包含抽象方法的類一定是抽象類,但抽象類不一定包含抽象方法,抽象類還可以包含普通方法
- 抽象方法的許可權修飾符只能為
public、protected、default
,預設情況下為 public - 一個類繼承於一個抽象類,則子類必須實現抽象類的抽象方法,如果子類沒有實現父類的抽象方法,那子類必須定義為抽象類
public abstract class AbstractName{ public String variable; public AbstractName(String variable){ this.variable = variable; } public abstract void method1(); public void method2(){ //do something } }
介面:Java介面可以看成是一種特殊的類,即用 interface
關鍵字修飾的類。它具有如下特點
- 介面中可以包含 變數 和 方法,變數被隱式指定為
public static final
,方法被隱式指定為public abstract
- 介面支援多繼承,解決了 Java 中類不能多繼承的問題
- 一個類可以同時實現多個介面,一個類實現某個介面則必須實現該介面中的抽象方法,否則該類必須被定義為抽象類
public interface InterfaceName{ public static final int variable=10; default void method1(){ //do something } public static void method2(){ //do something } public void method3(); }
總結:從設計層面來說,抽象是對類的抽象,是一種模板設計,而介面是對行為的抽象,是一種行為的規範
介面 和 抽象類 區別
-
public
-