Java接口和抽象類的區別

  1. 抽象類:若是一個類含有抽象方法,那麼這個類爲抽象類,抽象類的類前必須用abstract關鍵字修飾,由於抽象類中含有未實現的方法,因此不能用抽象類建立對象
  2. 抽象方法:是一個特殊的方法,他只有聲明,沒有具體的實現,由於抽象類中含有未具體實現的方法,因此不用用抽象類建立對象,若是一個類繼承抽象類,那麼久必須爲基類中的抽象方法提供定義,若是沒有實現抽象類的方法,那麼繼承的類也是抽象類。

抽象類和普通類的三個不一樣點:java

  1. 抽象方法必須爲public或者protected(若是爲private,那麼將不能被子類繼承,子類沒法實現其抽象方法),因此缺省狀況下默認時public
  2. 抽象類不能用來建立對象
  3. 若是一個類繼承一個抽象類,那麼它必須實現父類(抽象類)的抽象方法,若是子類沒有實現父類的抽象方法,那麼必須將子類也定義爲abstract(抽象類)

接口:能夠含有變量和方法,須要注意的是接口中變量會被隱式地定義爲public static final變量(而且只能是public static final變量,使用private修飾會報編譯錯誤),方法也會被指定爲public abstract,而且只能是public abstract方法(使用其餘關鍵字修飾如 private public protected都會報錯),而且接口中的方法不能有具體的實現,接口中的方法是抽象方法。接口是一種極度抽象的類型,比抽象類更加的抽象,通常狀況下不在接口中定義變量。ide

抽象類和接口的區別?函數

  • abstract class抽象類在java語言中表示的是一種繼承關係,一個類只能有一次的繼承關係,可是一個類卻能夠實現多個接口interface.
  • abstract class抽象類能夠有本身的數據成員,也能夠有不是非abstract得成員方法,
  • interface中,只可以有靜態的不可以被修改的靜態成員(必須是static final的,通常不在interface中定義數據成員),接口中的全部成員方法都是abstract的
  • 實現抽象類的和接口的類必須實現其中全部的方法,若是子類沒有實現抽象類中的全部方法那麼子類也必須是抽象類,子類實現接口,就必須把接口中的全部方法實現。接口也能夠繼承接口,此時不須要實現父類接口,抽象類能夠有非抽象方法,接口中不能有具體實現的方法。
  • 接口中的變量默認爲public static final類型,而且必需要給他初始值,因此實現類中不能從新定義,也不能改變他的值。
  • 接口中方法默認爲public abstract類型,不能是static方法,static方法是類方法,他不容許子類覆寫(override)可是抽象類容許有static方法。

相同點:對象

1.都是抽象概念的產物;繼承

2.都須要被繼承或實現才能發揮他們的功能;接口

3.抽象類和接口都不能被實例化,不能調用new關鍵字建立實例。編譯

不一樣點:class

  1. 抽象類必需要用abstract修飾,定義接口要用interface關鍵字;變量

  2. 抽象類能夠包含抽象方法,也能夠包含普通方法;構造函數

  3. 抽象類裏能夠定義非靜態變量,靜態變量,接口裏全部定義的變量都默認是public static final修飾;

  4. 抽象方法必須顯示地定義成 public abstract, 接口中的方法默認就是public abstract,也可顯示定義;

  5. 抽象類能夠包含Field,方法(普通方法和抽象方法)、構造器、初始化塊、內部類、枚舉類6種成分。接口裏能夠有Field,方法,內部類,枚舉。

  6. 抽象類只能單繼承,接口支持多繼承。

  7. 抽象類能夠有構造函數,用來被子類調用,不能用來建立實例。接口是沒有構造函數的。

相關文章
相關標籤/搜索