学習7日目:ここで一旦、復習。

学習時間について。

  • Day:7
  • Today:2h
  • Total:52h

学習内容について。

差分だけの記述が可能になる「継承」。

package test;

public class Student {

    class StudentBase {
        public int studentId;// 学籍番号
        public String studentName;// 生徒名
        public String clubName;// 部活動名
        public int vitality;// 体力

        // コンストラクタ
        StudentBase() {

        }

        // 引数ありコンストラクタ
        StudentBase(int studentId, String studentName, String clubName,
                int vitality) {
            this.studentId = studentId;
            this.studentName = studentName;
            this.clubName = clubName;
            this.vitality = vitality;
        }

        // 自己紹介メソッド
        void introduce() {
            vitality = vitality - 10;
            System.out.println("私の名前は" + studentName + "です。");
            System.out.println("部活動は" + clubName + "です。");
        }

        // 挨拶をするメソッド
        void greeting() {
            vitality = vitality - 10;
            System.out.println("おはようございます");
        }

        // 挨拶をするメソッド、オーバーロード
        void greeting(String clubName) {
            vitality = vitality - 10;
            System.out.println(clubName + "の皆さん、おはようございます");
        }

        // 残り体力を知らせるメソッド
        void showVitality() {
            vitality = vitality - 10;
            System.out.println("残り体力は" + vitality);
        }
    }

    class StudentActivity extends StudentBase {
        // フィールド
        public String homework;

        // コンストラクタ
        StudentActivity() {

        }

        // 引数ありコンストラクタ
        StudentActivity(int studentId, String studentName, int vitality) {
            super.studentId = studentId;
            super.studentName = studentName;
            super.clubName = "帰宅部";
            super.vitality = vitality;
            this.homework = "未定";
        }

        // 報告するメソッド
        void report() {
            vitality = vitality - 10;
            System.out.println("今日も頑張ります!");
        }
    }
}

オブジェクト指向の最初に書いたコードを編集。

すべての生徒に共通するプロパティは、名前、部活動名なのでそれらは親クラスに実装する。そして、部活動ごとに活動内容は異なるのでそれらは子クラスに実装する。そうすることにより、子クラスに自己紹介を記述しなくても親クラスから継承するだけでいい(差分だけ子クラスに記述)。

  • StudentBase:親クラス
  • StudentActivity:子クラス
  • extends StudentBaseと記述することで継承の仕組みを利用できる
  • super:親クラスのプロパティを明示する
  • this:自分のクラスのプロパティを明示して操作できる(子クラス)
継承されるものとされないもの
  • メソッドやプロパティ→継承される
    • privateなプロパティとメソッド→継承されない
  • コンストラクタ→継承されない

継承はいくらでも可能であるが、し過ぎると相互に依存関係が発生して修正しにくくなるので注意。


ここら辺で頭が混乱してきたから今までの復習を始める。。オブジェクト指向をもう一度おさらい。初期値(コンストラクタ)のところがイマイチ分からん。引数も付いてくると尚更。

今日の反省と明日の目標。

今日はあまり時間が取れなかったので、継承を少し齧っただけで終わった。。

少しくらい分からないところがあっても飛ばしながら進めてきたが、方針転換。完全に理解してから先に進めることにする。やっぱり、1つずつ理解しなければ次に繋がっていかないと長いコードを書いているうちに思った。

明日は図書館に行ってJavaの本でも借りてこようかな。ネットで調べても良いけど、基礎は本の方が良い気がする。カリキュラムを進めていくと表現が合わないのか、しっくり入ってこない箇所がいくつかあるので別の見方から理解を深めたい。

閉じる