抽象化: Java での抽象クラスのデコード

Barbara Streisand
リリース: 2024-10-30 08:09:03
オリジナル
925 人が閲覧しました

Abstraction: Decoding Abstract Classes in Java

この投稿では、Java の抽象化の重要な部分である 抽象クラス について説明します。前に説明した概念に基づいて、抽象化によって複雑なシステムがどのように簡素化されるかを検討します。抽象クラスは他のクラスの設計図として機能するため、不必要な複雑さを隠しながら、関連する詳細のみに焦点を当てることができます。

抽象クラスとは何か、なぜ存在するのか、どのように使用されるのかについて詳しく見ていきましょう。


抽象クラスとは何ですか?

抽象クラスは、単独ではインスタンス化できないクラスです。これは、その抽象メソッドの具体的な実装を提供するサブクラスによって拡張されるように設計されています。言い換えれば、抽象クラスはそのサブクラスの基礎をレイアウトし、コードの再利用と構造の強化を可能にします。

抽象クラスの主な特徴:

  • abstract キーワードを使用して定義されています。

  • サブクラスによって実装する必要がある抽象メソッド (本体のないメソッド) を含めることができます。

  • 完全な実装を備えた 具象メソッド を持つこともできます。

  • コンストラクター、フィールド、および非抽象メソッドを宣言できます。

  • 直接インスタンス化することはできません


なぜ抽象クラスなのか?

抽象クラスを使用すると、開発者は不必要な実装の詳細をユーザーから隠すことができ、同時に特定のメソッドがすべてのサブクラスで実装されるようになります。これらは半分定義されたテンプレートとして機能し、基本クラスで共有機能を提供することでコードの再利用を促進します。


例: 従業員とマネージャー

抽象クラスがどのように機能するかを示すために、抽象 EmployeeParent クラスとその ManagerChild サブクラスを含む次の例を見てみましょう。親クラスは共有機能を保持し、子クラスはパフォーマンス ボーナスなどの特定の詳細を備えた実装を完了します。

従業員親.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. ManagerChildEmployeeParent を拡張し、業績ボーナスを含む純給与を計算するための特定のロジックを提供します。

  4. 抽象クラスは直接インスタンス化できないため、抽象クラス コンストラクターは子クラス コンストラクターの super() 呼び出しを介して呼び出されます。


いつ抽象クラスを使用する必要がありますか?

  • コードの再利用性: 複数のクラスが共通のフィールドと動作を共有する場合。

  • 構造の強制: サブクラス内の特定のメソッドの実装を義務付けたい場合。

  • 部分実装: 一部のロジックはクラス間で共有できますが、特定のロジックは異なります。

  • 使用例: 共通のプロパティ (色など) と抽象メソッド (getArea など) を備えた抽象 Shape クラスを作成できます。これらは、形状 (円、四角形) によって実装が異なります。


結論

抽象クラスは、完全な抽象化と具体的な実装の間のバランスを提供することにより、Java で重要な役割を果たします。これにより、開発者は複雑な詳細をユーザーから隠しながら、必要なことに集中することができます。抽象クラスを理解し効果的に使用することは、オブジェクト指向プログラミングを習得するための重要なステップです。

シリーズの次の投稿をお楽しみに。インターフェイスと、それらが抽象クラスとどのように異なるのかを探ります。


関連記事

  • Java の基礎

  • アレイインタビューの要点

  • Java メモリの基礎

  • Java キーワードの基礎

  • コレクション フレームワークの基本

コーディングを楽しんでください!

以上が抽象化: Java での抽象クラスのデコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート