とよぶ

歌いながらコード書いてます

Javaオブジェクト指向(2)〜修正ver〜

継承

// User.java
public class User {
    public String name;
    public void speak() {
        System.out.println("I'm" + name + ".");
    }
}

/** UserSuper.java
 * ・コンストラクタ明記せず(今回のコード)
 * →サブクラスでクラスでデフォルトコンストラクタ
 * →スーパークラスでデフォルトコンストラクタ。コンパイル可能。
 * ・もしスーパークラスで引数ありコンストラクタを明記
 * →サブクラスでデフォルトコンストラクタ
 * →サブクラスのなかのsuper();が実行できずコンパイルエラー!
 */
public class UserSuper extends User {
    public static void main(String[] args) {
        public String age;

        public void speak() {
            System.out.println("I'm" + name + ", and" + age + "years old.");
        }

        User2 user2 = new User2();
        user2.speak();
    }
}
// UserSuper.java
// コンストラクタ明記
public class UserSuper extends User {
    public static void main(String[] args) {
        public String age;

        public void speak() {
            System.out.println("I'm" + name + ", and" + age + "years old.");
        }

        User2 user2 = new User2();
        user2.speak();
    }
}

多態性

オーバーライド
  • 約束事3点
    1. メソッドの戻り値が同じ
    2. メソッド名が同じ
    3. 引数が一致
  • オーバーライドさせたくない場合はfinalをつける
  • finalの使い方3つ
    1. クラス(継承を禁止)
    2. メソッド(オーバーライドを禁止)
    3. フィールド(代入を禁止)
オーバーロード
  • 同じ名前のメソッドを複数作成可能
    1. 戻り値は自由
    2. メソッド名が同じ
    3. 引数はを一致させてはいけない(引数が同じ場合実行時に見分けつかない。引数の型と順番に注意する。)
多態性の制限
  • サブクラスで作ったオブジェクトはスーパークラスの変数に代入することができる。
  • 以上の場合、以下のコメントの現象に注意。
// User.java
public class User {
    public String name;
    public void speak() {
        System.out.println("I'm" + name + ".");
    }
}

// UserSuper.java
public class UserSuper extends User {
    public static void main(String[] args) {
        public String age;

        public int setAge(int age) {
            this.age = age;
        }

        public void speak() {
            System.out.println("I'm" + name + ", and" + age + "years old.");
        }

        User user = new User2();// 可能。
        user.setAge(20);        // コンパイルエラー。Userクラスにはわからない!
      
        
        user.speak();           // User2のspeak()が呼び出される!オーバーライドされる。
                                // 要はメソッド名と引数!
    }
}


(追記)
さっきまでは多態性のところでかなり混乱していたが、要はメソッドはメソッド名だけが名前じゃなくて、メソッド名と引数をあわせて名前。名字と名前みたいな感じ。


〜やるべきこと〜
githubでのソースコード管理
今日Amazonの本が届く。