「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java の抽象クラス – 解説

Java の抽象クラス – 解説

2024 年 11 月 8 日に公開
ブラウズ:958

Abstract Classes in Java – Breaking It Down

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

抽象クラスは、他のクラスの設計図のようなものです。抽象クラスから直接オブジェクトを作成することはできません。代わりに、それを、その上に構築して詳細を埋めることができる他のクラスの基盤として使用します。

抽象クラスを使用する理由

抽象クラスは、いくつかの共通機能を持つ一般的な概念を定義したいが、状況によって異なる可能性がある特定の詳細を考慮する余地も残しておきたい場合に便利です。たとえば、食事や睡眠などの共通の特徴を含む「動物」の一般的な概念があるかもしれませんが、動物が異なれば、食事や睡眠の方法も異なる可能性があります。

抽象クラスの作成

Animal という抽象クラスを作成する方法は次のとおりです:

public abstract class Animal {
    abstract void makeSound();  // Abstract method, no body

    void sleep() {
        System.out.println("This animal sleeps.");
    }
}

この例では、makeSound() は抽象メソッドです。つまり、本体がまだありません。ただし、sleep() メソッドは完全に実装されています。

抽象クラスの拡張

それでは、Animal クラスを拡張するいくつかのクラスを作成しましょう:

public class Dog extends Animal {
    void makeSound() {
        System.out.println("The dog barks.");
    }
}

public class Cat extends Animal {
    void makeSound() {
        System.out.println("The cat meows.");
    }
}

Dog クラスと Cat クラスは両方とも、独自のバージョンの makeSound() メソッドを提供する必要がありますが、sleep() メソッドをそのまま継承します。

抽象クラスとインターフェイス

  • 継承: クラスは 1 つの抽象クラスのみを拡張できますが、複数のインターフェイスを実装できます。
  • メソッド実装: 抽象クラスには、抽象メソッド (本体なし) と完全に実装されたメソッドの両方を含めることができます。インターフェイス (Java 8 より前) には抽象メソッドのみを含めることができます。
  • Constructor: 抽象クラスにはコンストラクターを含めることができますが、インターフェイスにはコンストラクターを含めることはできません。

部分的な実装

抽象クラスは、すべての子クラス間で共有する必要があるメソッドがいくつかあるが、一部のメソッドをそれらの子クラスで強制的に定義したい場合に最適です。

public abstract class Bird extends Animal {
    void move() {
        System.out.println("The bird flies.");
    }
}

Bird を拡張するクラスは、Animal から move() メソッドと sleep() メソッドの両方を継承しますが、それでも makeSound() を実装する必要があります。

チャレンジ: 自分で試してみましょう!

  1. 抽象メソッド startEngine() を使用して Vehicle という抽象クラスを作成します。
  2. Vehicle を拡張し、startEngine() メソッドを実装する 2 つのクラス Car と Motorcycle を作成します。
  3. stopEngine() などの共通メソッドを Vehicle に追加し、それが子クラスでどのように機能するかを確認します。

結論

Java の抽象クラスは、関連するクラスに特定の詳細を定義する余地を残しながら、関連するクラスの共有基盤を作成する方法を提供します。これらは共有機能と柔軟性のバランスをとり、コードを強力かつ再利用可能にします。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/be11amer/abstract-classes-in-java-breaking-it-down-1k79?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3