Java抽象類和接口

abstract 的理解

abstract(抽象)可以修飾類、方法
如果將一個類設置為abstract,則此類必須被繼承使用。此類不可生成對象,必須被繼承使用。
abstract 和 static 不能放在一起,否則便會出現錯誤。(這是因為static不可被覆蓋,而abstract為了生效必須被覆蓋。)
abstract 和 final 不能放在一起,否則便會出現錯誤。

抽象類的意義

為其子類提供一個公共的類型 封裝子類中得重復內容 定義抽象方法,子類雖然有不同的實現 但是定義是一致的

接口特性

接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會報錯)。
接口中可以含有變量,但是接口中的變量會被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會報編譯錯誤)。
接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。

接口的意義

提供一個規范,要求類必須實現指定的方法。
解決 Java 中的單繼承問題,可以用接口來實現多繼承的功能,簡單化多重繼承中繼承樹的復雜程度。
增強程序的擴展性。

抽象類和接口的區別

抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
接口中不能有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類中可以有靜態代碼塊和靜態方法。注意:Java 8的新特性允許接口中存在靜態方法。
一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
接口中不能有構造函數和main方法;而抽象類中可以有。

接口與類的區別

接口不能用于實例化對象。
接口沒有構造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了 static 和 final 變量。
接口不是被類繼承了,而是要被類實現。
接口支持多重繼承。

接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concreteclass)?

接口可以繼承接口。但是要使用extends,而不是用implements。
抽象類可以實現接口。
比如java.util中的AbstractCollection類就是實現的Collection接口。
抽象類可以繼承實體類。
eg:
interface MyInterface {}
interface AnotherInterface extends MyInterface {}
class EntityClass {}
abstract class AbstractClass extends EntityClass implements MyInterface {}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 寫在前面 本文背景為JDK 1.8 ,為個人學習筆記整理,略有凌亂。如有紕漏,請務必指出。 抽象類 抽象類即是聲明...
    Van96閱讀 373評論 0 1
  • 一 抽象類在java中用abstract關鍵字修飾的不能被實例化的類稱為抽象類,抽象 類中可以有抽象方法也可以有非...
    安安靜靜寫代碼閱讀 233評論 0 0
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,141評論 0 62
  • 1.抽象類概念抽象類必須聲明為public,protected,缺省下默認為public,如果不能繼承就沒有了意義...
    camlboy閱讀 418評論 0 0