Java基礎教程,第十一講,阻止繼承與抽象類

上一節課咱們學習了Java中的繼承語法,以及如何繼承中的方法重寫和super()關鍵字,今天咱們將學習一下如何阻止繼承以及抽象類。java

課程內容

阻止繼承:final類和方法

有些時候咱們但願阻止某個類被繼承,不容許擴展的類能夠定義爲final類。在定義類的時候使用final關鍵字來修飾,語法以下:編程

public final class Executive{}學習

類中的特定方法也能夠被聲明爲final。若是這樣作,子類就不能覆蓋這個方法。final類中的全部方法都會自動生成爲final方法,語法以下:測試

public class Executive{
  public final int getAge()
  {
  }
}

前面咱們說過域也能夠定義爲final,對於final域來講,構造對象以後就不容許修改值了。final類只會把方法生成爲final,而域不會被設置。插件

爲何要使用final關鍵字?

將方法或者類聲明爲final的主要目的是:確保父類不會在子類中改變定義,String類聲明爲final類,不容許定義String的子類,也就是說若是有一個String類的引用,他引用的必定是String對象,而不是其餘類的對象。code

抽象類

先看一下抽象類的示意圖: 對象

什麼是抽象類?

使用abstract關鍵字聲明的方法稱爲抽象方法,包含一個或者多個抽象方法的類稱爲抽象類,必須使用abstract關鍵字修飾類。blog

爲何要使用抽象類?

抽象類能夠總結出子類的通用方法,定義爲抽象方法。繼承

疑問與解惑

我在學習的過程當中,一直有一個疑問,不知道你們有沒有和我同樣的想法?普通類也能夠繼承父類,也能夠把通用的方法放到父類,實現代碼複用,爲何還要用抽象類?思考一下!get

不少博客在闡述繼承優勢時,大多都在講複用,而真正的優勢在於定義一個抽象類類型的引用P,能夠經過P引用子類所實現的抽象方法。

還有一個優勢就是,若是咱們沒有使用抽象類,那麼子類能夠不重寫父類的方法,而使用抽象類普通類必須實現父類的全部抽象方法。

看一下下面的代碼,咱們經過抽象類實現一個播放器:

先定義一個抽象類:

抽象類中定義抽象的play方法,全部播放插件實現此方法進行播放。

測試類:

輸出結果:

咱們能夠直接使用player引用來調用子類的play方法,進行播放。

特性

抽象方法,沒有方法體,且抽象方法必須爲Public修飾

抽象類不能被實例化。也就是說若是一個類聲明爲abstract,那麼這個類就不能建立對象。

抽象類中能夠包含非抽象方法,但若是一個類中的全部方法都是非抽象方法,那這個類沒有任何意義。

普通類繼承抽象類,必須實現抽象類中的全部抽象方法。

抽象類繼承抽象類,不須要實現全部抽象方法。

小結

其實Java的面向對象看了不下三遍,其中Java編程思想一書中關於抽象也讀過不下兩次,每次都是似懂非懂,看完就忘了。學完本次課程,再加上播放器的簡單Demo,對Java中的抽象類纔算真正的理解了。

關注公衆號,回覆 java基礎 下載所有代碼+PDF版電子書

相關文章
相關標籤/搜索