小白心目中的Java抽象類(abstract class)

  在java開發中,咱們有時會定義了一個父類,這個父類只有對方法的描述,但卻沒有在父類中寫出對方法的實現,這種被定義的方法稱爲抽象方法。那麼理所固然,含有抽象方法的類就稱爲抽象類。用關鍵字abstract修飾。java

  例如我寫一個父類Person:學習

1 abstract class Person{
2     public abstract void study();
3     public void eat(){
4         System.out.println("吃的技能");
5     }
6 }

能夠看出,這個Person類被abstract修飾符修飾,並且抽象方法study()中並無方法的實現,其中{}能夠省略。如今,Person類就是一個標準的抽象類。spa

其中,抽象類具備具備如下的語法規則須要遵循:code

  一、一個類中若是有抽象方法,則這個類必須是抽象類。對象

  二、抽象類中能夠沒有抽象方法。blog

  三、抽象類是不能存在實例對象的,換句話說就是抽象類就是爲了被繼承而存在的。繼承

  四、一個子類若是繼承了抽象類,必須實現抽象類中定義的全部抽象方法。開發

  五、抽象類能夠繼承抽象類,能夠不重寫父類的方法。class

接下來,寫兩個繼承Person類的子類:語法

 1 class Student extends Person{
 2     public void study(){
 3         System.out.println("Student的學習內容");
 4     }
 5 }
 6 
 7 class Worker extends Person{
 8     public void study(){
 9         System.out.println("Worker的學習內容");
10     }
11 }

能夠看出,兩個子類都分別實現了抽象方法study(),不實現就會報錯。

若是抽象類只有僅僅上面的好處,那感受和普通的類沒有什麼大的區別了,咱們徹底能夠定義兩個普通的類Student和Worker,給它們分別實現study()方法,那麼抽象類的意義何在呢?

其實,在調用的時候,咱們這麼進行調用:

1 Person p = new Worker();
2 Person s = new Student();

調用的時候採用父類的類型指向子類的實例的語法,這種語法就叫作多態。其好處是一旦需求有改動的時候,修改起來靈活,變化起來容易,不用修改過多的代碼。

最後,在平時寫代碼時要注意,abstract不能與下面修飾符一塊兒用:

    一、finaly

    二、private

    三、static

相關文章
相關標籤/搜索