33_抽象類

傻傻的張子默ing發表於2020-11-10

第三十三章 抽象類

作者:張子默

一、概述

1、由來

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

2、定義

  • 抽象方法:沒有方法體的方法。
  • 抽象類:包含抽象方法的類。

二、abstract使用格式

1、抽象方法

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

定義格式:

修飾符 abstract 返回值型別 方法名(引數列表);

程式碼舉例:

public abstract void run();

2、抽象類

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

定義格式:

abstract class 類名字{
    
}

程式碼舉例:

public abstract class Animal {
	public abstract void run()}

3、抽象的使用

繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須宣告為抽象類。最終,必須有子類實現該父類的抽象方法,否則,從最初的父類到最終的子類都不能建立物件,失去意義。

程式碼舉例:

public class Cat extends Animal {
    public void run (){
        System.out.println("小貓在牆頭走~~~")}
}
public class CatTest {
    public static void main(String[] args) {
        // 建立子類物件
        Cat c = new Cat();
        // 呼叫run方法
        c.run();
    }
}
輸出結果:
小貓在牆頭走~~~

此時的方法重寫,是子類對父類抽象方法的完成實現,我們將這種方法重寫的操作,也叫作實現方法

三、注意事項

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

  • 抽象類不能建立物件,如果建立,編譯無法通過而報錯。只能建立其非抽象子類的物件。

    理解:假設建立了抽象類的物件,呼叫抽象的方法,而抽象方法沒有具體的方法體,沒有意義。

  • 抽象類中,可以有構造方法,是供子類建立物件時,初始化父類成員使用的。

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

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

    理解:未包含抽象方法的抽象類,目的就是不想讓呼叫者建立該類物件,通常用於某些特殊的類結構設計。

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

    理解:假設不重寫所有的抽象方法,則類中可能包含抽象方法。那麼建立物件後,呼叫抽象的方法,沒有意義。

相關文章