首頁  >  文章  >  Java  >  抽象:解碼 Java 中的抽象類別

抽象:解碼 Java 中的抽象類別

Barbara Streisand
Barbara Streisand原創
2024-10-30 08:09:03920瀏覽

Abstraction: Decoding Abstract Classes in Java

在這篇文章中,我們將探討 抽象類別,它是 Java 中抽象的重要組成部分。我們將建立在前面討論的概念的基礎上,並研究抽像如何簡化複雜的系統。抽象類別充當其他類別的藍圖,使我們能夠只專注於相關細節,同時隱藏不必要的複雜性。

讓我們更深入地了解什麼是抽象類別、它們為何存在以及如何使用它們


什麼是抽象類別?

抽象類別是一個不能單獨實例化的類別。它旨在透過為其抽象方法提供具體實現的子類別進行擴展。換句話說,抽象類別為其子類別奠定了基礎,從而實現了程式碼重用和強制結構。

抽象類別的主要特點:

  • 使用abstract關鍵字定義。

  • 可以包含必須由子類別實作的抽象方法(沒有主體的方法)。

  • 還可以有完整實現的具體方法

  • 可以宣告建構子、欄位和非抽象方法

  • 無法直接實例化


為什麼需要抽象類別?

抽象類別允許開發人員向使用者隱藏不必要的實作細節,同時確保所有子類別都實作某些方法。它們充當半定義模板,並透過在基類中提供共享功能來鼓勵程式碼重複使用。


例如:員工和經理

為了示範抽象類別的工作原理,讓我們來看看以下涉及抽象 EmployeeParent 類別及其 ManagerChild 子類別的範例。父類別擁有共享功能,而子類別則完成具體細節(如績效獎金)的實作。

EmployeeParent.java

package oops.abstract_class;

public abstract class EmployeeParent {
    private int id, depId;
    private String name;
    private double basicSal;

    public EmployeeParent(int id, String name, int deptId, double basicSal) {
        this.id = id;
        this.depId = deptId;
        this.name = name;
        this.basicSal = basicSal;
    }

    // Abstract method to be implemented by subclasses.
    protected abstract double computeNetSalary();

    protected double getBasicSal() {
        return basicSal;
    }

    @Override
    public String toString() {
        return "EmployeeParent [id=" + id + ", depId=" + depId +
               ", name=" + name + ", basicSal=" + basicSal + "]";
    }
}

ManagerChild.java

package oops.abstract_class;

public class ManagerChild extends EmployeeParent {
    private double perfBonus;

    public ManagerChild(int id, String name, int deptId, double basicSal, double perfBonus) {
        // Calling the constructor of the abstract class.
        super(id, name, deptId, basicSal);
        this.perfBonus = perfBonus;
    }

    // Implementing the abstract method from EmployeeParent.
    @Override
    public double computeNetSalary() {
        return getBasicSal() + perfBonus;
    }

    @Override
    public String toString() {
        return "ManagerChild [perfBonus=" + perfBonus + "\n" + super.toString() + "]";
    }

    public static void main(String[] args) {
        ManagerChild manager = new ManagerChild(1, "Arshi", 2, 10000, 1890);
        System.out.println(manager);
        System.out.println("Net Salary: " + manager.computeNetSalary());

        // Abstract class cannot be instantiated 
        EmployeeParent employee = new EmployeeParent(); // Compile Error
    }
}

分解範例

上面的程式碼中:

  1. EmployeeParent 是定義其子類別結構的抽象類別。

  2. 它包含具體方法(如toString和getBasicSal)和抽象方法(computeNetSalary),它必須由任何子類別實作。

  3. ManagerChild 擴展了 EmployeeParent 並提供了計算淨工資的具體邏輯,包括績效獎金。

  4. 抽象類別建構子是透過子類別建構子中的 super() 呼叫來呼叫的,因為抽象類別不能直接實例化。


什麼時候應該使用抽象類別?

  • 程式碼可重複使用性:當多個類別共用公共欄位和行為時。

  • 強制結構:當您想要強制子類別中某些方法的實作時。

  • 部分實作:當某些邏輯可以在類別之間共享,但具體邏輯有所不同時。

  • 使用案例範例: 您可以擁有一個具有公共屬性(如顏色)和抽象方法(如getArea)的抽象Shape 類,不同的形狀(圓形、矩形)會以不同的方式實現。


結論

抽象類別在 Java 中發揮著至關重要的作用,在完全抽象和具體實作之間提供平衡。它們使開發人員能夠專注於必要的事情,同時向使用者隱藏複雜的細節。理解並有效地使用抽象類別是掌握物件導向程式設計的重要一步。

請繼續關注本系列的下一篇文章,我們將探討介面以及它們與抽象類別有何不同!


相關貼文

  • Java 基礎

  • 陣列面試重點

  • Java 記憶體基礎

  • Java 關鍵字要點

  • 集合架構重點

編碼快樂!

以上是抽象:解碼 Java 中的抽象類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn