抽象クラスは、他のクラスの設計図のようなものです。抽象クラスから直接オブジェクトを作成することはできません。代わりに、それを、その上に構築して詳細を埋めることができる他のクラスの基盤として使用します。
抽象クラスは、いくつかの共通機能を持つ一般的な概念を定義したいが、状況によって異なる可能性がある特定の詳細を考慮する余地も残しておきたい場合に便利です。たとえば、食事や睡眠などの共通の特徴を含む「動物」の一般的な概念があるかもしれませんが、動物が異なれば、食事や睡眠の方法も異なる可能性があります。
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() メソッドをそのまま継承します。
抽象クラスは、すべての子クラス間で共有する必要があるメソッドがいくつかあるが、一部のメソッドをそれらの子クラスで強制的に定義したい場合に最適です。
public abstract class Bird extends Animal { void move() { System.out.println("The bird flies."); } }
Bird を拡張するクラスは、Animal から move() メソッドと sleep() メソッドの両方を継承しますが、それでも makeSound() を実装する必要があります。
Java の抽象クラスは、関連するクラスに特定の詳細を定義する余地を残しながら、関連するクラスの共有基盤を作成する方法を提供します。これらは共有機能と柔軟性のバランスをとり、コードを強力かつ再利用可能にします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3