在這篇文章中,我們將探討 抽象類別,它是 Java 中抽象的重要組成部分。我們將建立在前面討論的概念的基礎上,並研究抽像如何簡化複雜的系統。抽象類別充當其他類別的藍圖,使我們能夠只專注於相關細節,同時隱藏不必要的複雜性。
讓我們更深入地了解什麼是抽象類別、它們為何存在以及如何使用它們。
抽象類別是一個不能單獨實例化的類別。它旨在透過為其抽象方法提供具體實現的子類別進行擴展。換句話說,抽象類別為其子類別奠定了基礎,從而實現了程式碼重用和強制結構。
使用abstract關鍵字定義。
可以包含必須由子類別實作的抽象方法(沒有主體的方法)。
還可以有完整實現的具體方法。
可以宣告建構子、欄位和非抽象方法。
無法直接實例化。
抽象類別允許開發人員向使用者隱藏不必要的實作細節,同時確保所有子類別都實作某些方法。它們充當半定義模板,並透過在基類中提供共享功能來鼓勵程式碼重複使用。
為了示範抽象類別的工作原理,讓我們來看看以下涉及抽象 EmployeeParent 類別及其 ManagerChild 子類別的範例。父類別擁有共享功能,而子類別則完成具體細節(如績效獎金)的實作。
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 + "]"; } }
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 } }
上面的程式碼中:
EmployeeParent 是定義其子類別結構的抽象類別。
它包含具體方法(如toString和getBasicSal)和抽象方法(computeNetSalary),它必須由任何子類別實作。
ManagerChild 擴展了 EmployeeParent 並提供了計算淨工資的具體邏輯,包括績效獎金。
抽象類別建構子是透過子類別建構子中的 super() 呼叫來呼叫的,因為抽象類別不能直接實例化。
程式碼可重複使用性:當多個類別共用公共欄位和行為時。
強制結構:當您想要強制子類別中某些方法的實作時。
部分實作:當某些邏輯可以在類別之間共享,但具體邏輯有所不同時。
使用案例範例: 您可以擁有一個具有公共屬性(如顏色)和抽象方法(如getArea)的抽象Shape 類,不同的形狀(圓形、矩形)會以不同的方式實現。
抽象類別在 Java 中發揮著至關重要的作用,在完全抽象和具體實作之間提供平衡。它們使開發人員能夠專注於必要的事情,同時向使用者隱藏複雜的細節。理解並有效地使用抽象類別是掌握物件導向程式設計的重要一步。
請繼續關注本系列的下一篇文章,我們將探討介面以及它們與抽象類別有何不同!
Java 基礎
陣列面試重點
Java 記憶體基礎
Java 關鍵字要點
集合架構重點
以上是抽象:解碼 Java 中的抽象類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!