自學Java之day09_Java之抽象類

原文鏈接:www.baidu.com

抽象類概述

父類中的方法,被它的子類們重寫,子類各自的實現都不盡相同。那麼父類的方法聲明和方法主體,只有聲明還有 意義,而方法主體則沒有存在的意義了。我們把沒有方法主體的方法稱爲抽象方法。Java語法規定,包含抽象方法的類就是抽象類。抽象方法所在的類,必須是抽象類才行。

抽象方法

使用 abstract 關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。

定義格式:

  • 修飾符 abstract 返回值類型 方法名 (參數列表)

例如:

public abstract void eat();

抽象類

如果一個類包含抽象方法,那麼該類必須是抽象類。

定義格式:

abstract class 類名字 {

}

例如:

    //抽象類
public abstract class Animal {
    //抽象方法
    public abstract void run();
}

抽象的使用

繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須聲明爲抽象類。最終,必須有子類實現該父 類的抽象方法,否則,從最初的父類到最終的子類都不能創建對象,失去意義。

如何使用抽象類和抽象方法:

  1. 不能直接創建new抽象類對象。
  2. 必須用一個子類來繼承抽象父類。
  3. 子類必須覆蓋重寫抽象父類當中所有的抽象方法。覆蓋重寫(實現):子類去掉抽象方法的abstract關鍵字,然後補上方法體大括號。
  4. 創建子類對象進行使用。

代碼舉例

定義抽象類

package demo11;

//定義一個抽象類
public abstract class DemoAnimal {
    //定義一個抽象方法
    public abstract void eat();
}

定義實現類Cat

package demo11;

public class DemoCat extends DemoAnimal {
    @Override
    public void eat() {
        System.out.println("我喜歡吃魚");
    }
}

定義實現類Dog

package demo11;

public class DemoDog extends DemoAnimal {

    @Override
    public void eat() {
        System.out.println("我喜歡吃骨頭");
    }
}

定義測試類

package demo11;

public class Test {
    public static void main(String[] args) {
        //創建實現類對象
        DemoCat demoCat = new DemoCat();
        // 調用重寫後的方法
        demoCat.eat();
        //創建實現類對象
        DemoDog demoDog = new DemoDog();
        // 調用重寫後的方法
        demoDog.eat();
    }
}

代碼運行之後結果

注意事項

關於抽象類的使用,以下爲語法上要注意的細節,雖然條目較多,但若理解了抽象的本質,無需死記硬背。

1. 抽象類不能創建對象,如果創建,編譯無法通過而報錯。只能創建其非抽象子類的對象。

  • 理解:假設創建了抽象類的對象,調用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。

2. 抽象類中,可以有構造方法,是供子類創建對象時,初始化父類成員使用的。

  • 理解:子類的構造方法中,有默認的super(),需要訪問父類構造方法。

3. 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

  • 理解:未包含抽象方法的抽象類,目的就是不想讓調用者創建該類對象,通常用於某些特殊的類結構設 計。

4. 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。除非該子類也是抽象 類。

  • 理解:假設不重寫所有抽象方法,則類中可能包含抽象方法。那麼創建對象後,調用抽象的方法,沒有 意義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章