深刻理解Java中的抽象類和接口

對於面向對象編程來講,抽象是它的一大特徵。在Java中,能夠經過兩種形式來體現OOP的抽象:抽象類和接口。這二者有太多向內的地方,又有太多不一樣的地方。不少人在初學的時候覺得它們能夠隨意互換使用,可是實際則否則。今天咱們就一塊兒學習如下Java中的抽象類和接口。

本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口html

抽象類

在瞭解抽象類以前,咱們先了解如下抽象方法。抽象方法是種特殊的方法:它只有聲明,沒有具體實現。抽象方法聲明格式以下:編程

abstract void get();

抽象方法必須用abstract關鍵字修飾。若是一個類中含有抽象方法,則稱這個類爲抽象類,抽象類必須使用abstract關鍵字修飾。由於抽象類中含有沒有具體實現的抽象方法,因此不能用抽象類建立對象函數

抽象類特色學習

  • 抽象類中能夠有成員函數,能夠是變量,也能夠是常量。網站

  • 抽象類中能夠有抽象方法,也能夠有普通方法,還能夠有靜態方法。spa

  • 有抽象方法的類必須聲明爲抽象類,抽象類中不必定有抽象方法。設計

  • 抽象類能夠有構造函數,可是不能建立對象,構造函數用於子類訪問父類數據的初始化。code

  • 抽象類的子類要麼是一個抽象類,若是是一個具體類必須重寫抽象類中的抽象方法。orm

抽象類和普通類區別htm

  1. 抽象類的方法必須爲public或者protected,缺省狀況下默認爲public(由於若是是private,則不被子類繼承,子類沒法實現該方法)。

  2. 抽象類不能用來建立對象。

  3. 若是一個類繼承一個抽象類,則該類必須實現父類的抽象方法。若是子類沒有實現父類的抽象方法,則必須將該子類定義爲抽象類。

接口

接口,英文稱做interface,在軟件工程中,接口泛指供別人調用的方法或者函數。從這裏,咱們能夠體會到Java語言設計的初衷,它是行爲的抽象,在Java中,定義接口的形式以下:

public interface Phone {

}

接口特色

  • 接口中能夠有變量,可是變量會被隱式的指定爲public static final變量,也就是常量(若是用private修飾,編譯會報錯),通常不在接口中定義變量。

  • 接口中方法只能是抽象方法,所有會被隱式的指定爲public abstract,(若是用private、protected、static、final修飾,編譯會報錯)

  • 接口沒有構造函數

抽象類與接口的區別

本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口

  1. 成員區別

  1. 關係區別

  1. 設計理念區別 
    抽象類: 
    強調的是is a關係,抽象類中定義的是共性特徵。 
    接口: 
    強調的是like a關係,接口中定義的是擴展功能。

小結

抽象類是具體類的公因式,接口是爲了將一些不相關的類「雜湊」成一個共同的羣體。一般咱們平時開發中就是多用接口,畢竟Java是單繼承。可是須要使用抽象類的時候仍是能夠用的,要是沒把握仍是用接口。

本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口

相關文章
相關標籤/搜索