學習Java基礎知識,打通面試關~十二介面與抽象類

技術小能手發表於2018-07-02

在我們Java開發的過程中,介面使我們經常使用到。但是我們也會用到抽象類。那麼我們在開發的時,具體應該怎麼選擇呢?這兩者有什麼區別?我們今天就來學習下。

抽象類

抽象類顧名思義就是不能例項化的類,我們在建立的時候會使用abstract 來建立。在抽象類中含有無具體實現的方法,所以我們在使用的時候不能使用該類來建立物件。

抽象類在表面上普通的類沒有區別,可以有多個抽象方法,當然也可以沒有抽象方法。

抽象類的實現主要是為了提供程式碼複用的目的。

抽象類前面的修飾除了abstract ,還有有public,protected,預設情況下是public。不能是private.不然子類不能繼承父類。

我們子類在繼承抽象類時,子類必須實現父類的抽象方法,否則 ,子類也必須定義為抽象類。

public abstract class Abstorct {
 //方法宣告為抽象的。
 public abstract  void  add();

}

public class AbstorctImpl  extends Abstorct {


   @Override
   public void add() {

   }
}

介面

程式設計中,介面我們經常使用,利用它達到API定義與實現分離的目的。

在Java中,是沒有多繼承這一實現的,但是我們可以使用介面來達到這個目的。方便我們去實現我們想要的目的。

介面中的變數總是被隱式指定為public static final 變數。 並且方法也是被隱式的定義為public abstract。介面中的方法必須都是抽象方法。

在java8以後,介面中也有了預設的實現方法。

//java集合中一個預設實現的方法。
public interface Collection<E> extends Iterable<E> {
default boolean removeIf(Predicate<? super E> filter) {
       Objects.requireNonNull(filter);
       boolean removed = false;
       final Iterator<E> each = iterator();
       while (each.hasNext()) {
           if (filter.test(each.next())) {
               each.remove();
               removed = true;
           }
       }
       return removed;
   }
}

兩者不同點

兩者一個是類一個是介面,從子類來實現或者繼承時,實現就不同,繼承類java中只能單繼承。

抽象類是事務的抽象,比如我們對於一個動物的描述,人和猴都有相似的東西,可以抽象出來共同的特徵。 抽象類 是一個 has-a的關係。介面是is-a的關係。比如猴是否能跳,能跳躍,那麼就能實現該介面,不能實現則不能實現。

介面中不能含有靜態程式碼塊和靜態方法,但是抽象類是可以存在靜態程式碼塊和靜態方法的。

介面中的成員變數預設是public static final 型別的。抽象函式中的成員可以是各個型別的。

我們在程式中如果對介面進行增加方法,那麼子類實現也得增加其實現方法 不可取,但是java8以後增加了預設方法的實現。而抽象類中新增了非抽象方法,子類只會享受其能力的擴充套件,不用擔心編譯出現問題。

簡單瞭解下抽象方法和介面,讓我們在程式設計的時候更加享受其特性帶來的方便。在選擇上可以有更多的選擇。

原文釋出時間為:2018-07-01
本文作者:mengrui
本文來自雲棲社群合作伙伴“LuckQI”,瞭解相關資訊可以關注“LuckQI”。


相關文章