在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