# 什麼是抽象?

我們可以定義一個 Animal 類別,但實際上有這種東西嗎?顯然的,我們都只能舉出動物的實例,所以說,動物只是一個概念,並沒有一種生物叫作動物。

# 抽象類別

利用 abstract 關鍵字可以修飾掉類別,將類別轉為抽象:

使用格式
abstract class 類別名{
    // 成員定義
}

以動物作為例子:

例子
abstract class Animal{
    int height,weight;
    void move(){
        System.out.println("move...move...");
    }
}

這邊必須強調,抽象只是一個概念,而不是一個存在的實體。
同樣的,抽象類別不能被實體化

錯誤示範
強行實體化
class Test{
    public static void main(String[] args){
        Animal ani = new Animal();
    }
}
報錯
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Cannot instantiate the type Animal

若是想要運用抽象類別,就必須使用繼承的方式!!

繼承範例
abstract class Animal {
    // 成員定義
}
class Dog extends Animal {
    // 成員定義
}
class Bird extends Animal {
    // 成員定義
}

擁有這個概念的類別,繼承抽象類別,在程式撰寫上就可以利用多型的概念上程式更有邏輯性。

# 抽象方法

利用 abstract 可以使方法變成抽象方法,抽象方法只能寫方法的原型,無法定義方法的本體。

使用格式
// 使用格式
abstract 回傳型態 方法名稱(<參數...>);
// 範例
abstract void eat();
danger 錯誤範例

抽象方法內部是不可定義本體的喔!!!

錯誤示範
abstract void eat(){
    // 無論是否有內容物都會報錯
}
報錯
Abstract methods do not specify a body

抽象方法必須使用覆寫的方式定義方式的本體!!

範例程式
abstract class Animal {
    abstract void eat();
}
class Dog extends Animal{
    void eat(){
        System.out.println("啃骨頭...");
    }
}

特別注意的是,抽象方法只能定義在抽象類別中。 (否則會編譯錯誤)

更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay