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


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

  例如我寫一個父類Person:

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

可以看出,這個Person類被abstract修飾符修飾,而且抽象方法study()中並沒有方法的實現,其中{}可以省略。現在,Person類就是一個標准的抽象類。

其中,抽象類具有具有以下的語法規則需要遵循:

  1、一個類中如果有抽象方法,則這個類必須是抽象類。

  2、抽象類中可以沒有抽象方法。

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

  4、一個子類如果繼承了抽象類,必須實現抽象類中定義的所有抽象方法。

  5、抽象類可以繼承抽象類,可以不重寫父類的方法。

接下來,寫兩個繼承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不能與下面修飾符一起用:

    1、finaly

    2、private

    3、static

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM