ホームページ >Java >&#&チュートリアル >Java の抽象クラス – 解説

Java の抽象クラス – 解説

WBOY
WBOYオリジナル
2024-09-04 06:46:32532ブラウズ

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 より前の) インターフェースには抽象メソッドのみを含めることができます。
  • コンストラクター: 抽象クラスにはコンストラクターを含めることができますが、インターフェイスにはコンストラクターを含めることはできません。

部分的な実装

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

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。