この投稿では、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 中国語 Web サイトの他の関連記事を参照してください。