LoginSignup
0
0

【後編】Javaでオブジェクト指向を学びなおす

Last updated at Posted at 2023-12-15

前回の続きです!
継承、ポリモーフィズム編になります!

1.継承(Inheritance)について

継承は、既存のクラスから新しいクラスを作成する仕組みです。新しいクラスは既存のクラスの特性(データやメソッド)を継承し、必要に応じて追加や変更ができます。

これは覚えてるぞー
だけどしっかりコード化しよう

java
// 親クラス(スーパークラス)
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + "は食事している");
    }

    public void sleep() {
        System.out.println(name + "は寝ている");
    }
}

// 子クラス(サブクラス)
class Employee extends Person {
    public Employee(String name) {
        // 親クラスのコンストラクタを呼び出す
        super(name);
    }

    // 親クラスのメソッドをオーバーライド(上書き)
    @Override
    public void eat() {
        System.out.println(name + "は昼食を摂っている");
    }

    // 子クラス独自のメソッド
    public void work() {
        System.out.println(name + "は働いている");
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Employeeクラスのインスタンスを作成
        Employee employee = new Employee("開発太郎");

        // 継承したメソッドを呼び出す
        employee.eat();   // オーバーライドされたメソッドが呼ばれる
        employee.sleep(); // 親クラスのメソッドが呼ばれる

        // 子クラス独自のメソッドを呼び出す
        employee.work();
    }
}

実行結果
//employee.eat();
開発太郎は昼食を摂っている

//employee.sleep(); 
開発太郎は寝ている

//employee.work(); 
開発太郎は働いている

EmployeeクラスはPersonクラスを継承しています。
継承することで定義していないsleep関数を実行することができます。(便利!!)

加えて親クラスの関数を上書き(オーバーライド)ができます。例で表すとeat関数。

2.ポリモーフィズム(Polymorphism)について

ポリモーフィズムは、同じ名前のメソッドが異なるクラスで異なる振る舞いをすることを指します。これにより、異なるオブジェクトが同じメソッド名を共有できます。

文字読むと大体イメージつきますが、しっかりコード化。

java
// 人(Person)クラス
class Person {
    public void makeSound() {
        System.out.println("こんにちは!");
    }
}

// 仕事をしている人(WorkingPerson)クラス - Personクラスを継承
class WorkingPerson extends Person {
    @Override
    public void makeSound() {
        System.out.println("仕事してます!");
    }

    // 仕事をするメソッド
    public void doWork() {
        System.out.println("働く");
    }
}

// 学生(Student)クラス - Personクラスを継承
class Student extends Person {
    @Override
    public void makeSound() {
        System.out.println("勉強してます!");
    }

    // 勉強をするメソッド
    public void study() {
        System.out.println("勉強する");
    }
}

public class Main {
    public static void main(String[] args) {
        // ポリモーフィズムの例

        // Person型の配列に異なる種類の人を格納
        Person[] people = new Person[3];
        people[0] = new WorkingPerson();
        people[1] = new Student();
        people[2] = new WorkingPerson();

        // 配列をループして各人の音を鳴らす
        for (Person person : people) {
            person.makeSound();

            // WorkingPersonクラスのdoWorkメソッドやStudentクラスのstudyメソッドにアクセスできない
            // person.doWork();  // コンパイルエラー
            // person.study();   // コンパイルエラー
        }
    }
}

実行結果
仕事してます!
勉強してます!
仕事してます!

なるほどねと
WorkingPersonクラスとStudentクラスは同じ親クラスを持ちそれぞれでmakeSound関数をオーバーライドします。なので同じ関数名だけど処理内容は違うと。

ポリモーフィズムは元々よくわかってなかったかも。
しっかり勉強になりました。

3.終わりに

今回学びなおしをして抜けていた部分やそもそも知らなかったことを知識として知ることができました。
これらに加えてデザインパターンの勉強もしていきたいと感じます。

4.予告

次の投稿日は2024年1月5日を予定しています!
年始!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0