LoginSignup
0
0

More than 1 year has passed since last update.

Javaでメソッドをオーバーライドしたとき、オーバーライドされたメソッドを使用する親クラスで定義されたメソッドの挙動

Posted at

確かめたかったことは以下のコードと結果が全てです。
Parentクラスのgreet()メソッドでは内部でsay()メソッドを呼び出しています。
Childクラスではsay()メソッドをオーバーライドしています。その結果Childクラスのgreet()メソッドではChildクラスのsay()メソッドが使用されています。

これはParent childParent = child;のようにしてParentクラスのインスタンスとして扱って childParent.greet();のように呼び出した場合もChildクラスのsay()メソッドが使われます。(こっちは参照の流れを考えると当然な気もしてきた。)

Parentクラスのインスタンスだと思ってgreet()メソッドを呼び出したら、実はChildクラスのsay()メソッドが裏で使われていたとなるとコードリーディングしづらくなりそうですね。

public class Main {
  public static void main(String[] args) {
    Parent parent = new Parent();
    Child child = new Child();
    Parent childParent = child;

    parent.greet();
    child.greet();
    childParent.greet();
  }
}

class Parent {
  public void greet() {
    say("Hello");
  }

  public void say(String word) {
    System.out.println(word);
  }
}

class Child extends Parent {
  @Override
  public void say(String word) {
    System.out.println(word + "!");
  }
}

出力

Hello
Hello!
Hello!
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