オブジェクト指向プログラミング (OOP) は Java の基本概念であり、モジュール式で再利用可能でスケーラブルなコードの作成を容易にします。この投稿では、クラス、オブジェクト、継承、カプセル化、ポリモーフィズム、抽象化などの OOP の中核原則について説明します。
OOP は、「オブジェクト」の概念に基づいたプログラミング パラダイムであり、データとそのデータを操作するメソッドを含めることができます。コードをオブジェクトに整理することで、より管理しやすく、理解しやすいプログラムを作成できます。
OOP の 4 つの重要な原則は次のとおりです:
Java のコンテキストでこれらの概念をそれぞれ調べてみましょう。
2.1 クラスとは何ですか?
Java のクラスは、オブジェクトを作成するための設計図です。クラスから作成されたオブジェクトが持つプロパティ (フィールド) と動作 (メソッド) を定義します。クラスは、オブジェクトの構造と機能の概要を示すテンプレートと考えてください。
クラスの例:
public class Car { // Fields (attributes) String mark; String model; int year; // Method (behavior) void startEngine() { System.out.println("Engine started."); } }
この例では、Car クラスにはマーク、モデル、年という 3 つのフィールドと 1 つのメソッド startEngine() があります。
2.2 オブジェクトとは何ですか?
オブジェクトはクラスのインスタンスです。クラスを定義したら、そのクラスから複数のオブジェクトを作成し、それぞれのオブジェクトに独自のフィールド値を設定できます。
オブジェクトの作成例:
public class Main { public static void main(String[] args) { // Creating an object of the Car class Car myCar = new Car(); // Setting field values myCar.mark = "Toyota"; myCar.model = "Corolla"; myCar.year = 2021; // Calling a method myCar.startEngine(); // Outputs: Engine started. } }
この例では、myCar は Car クラスのオブジェクトであり、フィールドに特定の値が割り当てられています。
チャレンジ 1:
タイトル、著者、ページのフィールドを持つ Book という名前のクラスを作成します。 Book クラスのオブジェクトを作成し、そのフィールドを設定して、本の詳細を出力します。
カプセル化とは、データ (フィールド) とそのデータを操作するメソッドを 1 つのユニットまたはクラスにバンドルし、オブジェクトのコンポーネントの一部へのアクセスを制限する手法です。これは、アクセス修飾子 (プライベート、パブリック、保護) を使用して実現されます。
カプセル化は、オブジェクトの内部状態を意図しない干渉や誤用から保護するのに役立ちます。
カプセル化の例:
public class Person { // Private fields private String name; private int age; // Public methods to access private fields public String getName() { return name; } public void setName(String newName) { name = newName; } public int getAge() { return age; } public void setAge(int newAge) { if (newAge > 0) { age = newAge; } } }
この例では、Person クラスはフィールドをプライベートにすることでカプセル化し、それらのフィールドにアクセスして変更するためのパブリック メソッド (getName、setName、getAge、setAge) を提供します。
チャレンジ 2:
フィールドをプライベートにし、フィールドごとにパブリックの getter メソッドと setter メソッドを作成することで、Book クラスにカプセル化を追加します。
継承は、あるクラスが別のクラスのプロパティとメソッドを継承できるようにするメカニズムです。継承するクラスを「サブクラス」または「子クラス」といい、継承元のクラスを「スーパークラス」または「親クラス」といいます。
継承によりコードの再利用性が促進され、クラス間の自然な階層が確立されます。
継承の例:
// Superclass public class Animal { void eat() { System.out.println("This animal is eating."); } } // Subclass public class Dog extends Animal { void bark() { System.out.println("The dog is barking."); } } public class Main { public static void main(String[] args) { Dog myDog = new Dog(); myDog.eat(); // Inherited method from Animal class myDog.bark(); // Method from Dog class } }
この例では、Dog クラスは Animal クラスから Eat メソッドを継承し、独自のメソッド bark も持っています。
課題 3:
Book クラスを継承するサブクラス EBook を作成します。新しいフィールド fileSize とメソッド download() を EBook クラスに追加します。
ポリモーフィズムにより、異なるクラスのオブジェクトを共通のスーパークラスのオブジェクトとして扱うことができます。これは、メソッドのオーバーライドとインターフェイスを通じて実現できます。
5.1 メソッドのオーバーライド
メソッドのオーバーライドにより、サブクラスは、そのスーパークラスですでに定義されているメソッドの特定の実装を提供できます。
ポリモーフィズムの例:
public class Animal { void sound() { System.out.println("This animal makes a sound."); } } public class Cat extends Animal { @Override void sound() { System.out.println("The cat meows."); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Cat(); // Polymorphism myAnimal.sound(); // Outputs: The cat meows. } }
この例では、myAnimal のタイプは Animal ですが、Cat タイプのオブジェクトを参照し、Cat のオーバーライドされたサウンド メソッドが呼び出されます。
課題 4:
Book クラスの toString メソッドをオーバーライドして、本の詳細の文字列表現を返します。
抽象化には、システムの複雑な実装の詳細を隠し、必要な部分だけを公開することが含まれます。これは、抽象クラスとインターフェイスを使用して実現できます。
6.1 抽象クラス
抽象クラスはインスタンス化できず、サブクラスによって実装される必要がある抽象メソッド (本体のないメソッド) を含む場合があります。
抽象化の例:
abstract class Shape { abstract void draw(); // Abstract method } public class Circle extends Shape { @Override void draw() { System.out.println("Drawing a circle."); } } public class Main { public static void main(String[] args) { Shape myShape = new Circle(); myShape.draw(); // Outputs: Drawing a circle. } }
この例では、Shape は抽象メソッドdraw を持つ抽象クラスであり、Circle クラスによって実装されます。
チャレンジ 5:
抽象メソッド powerOn を使用して抽象クラス Device を作成します。 powerOn メソッドを実装するサブクラス Smartphone を作成します。
この投稿では、Java のオブジェクト指向プログラミングの主要な概念であるクラス、オブジェクト、継承、カプセル化、ポリモーフィズム、抽象化について説明しました。これらの原則を理解することは、複雑で効率的な Java アプリケーションを構築するために重要です。
提供された例や課題を自由に試してみてください。ご質問がある場合、またはさらに説明が必要な場合は、以下にコメントを残してください!
以上がオブジェクト指向プログラミング (OOP) を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。