1
0

背景

Javaの資格勉強をしている際に、なかなか理解できなたったところの備忘録。
きっとJavaを触り始めた人でもなかなか難しいところ(のはず)だと思うので、わかりやすく簡単に書くよ。

以下のキーワードを踏まえたうえで、解説していくよ。

キーワード

継承:クラスの中身の変数やメソッドをそのまま受け継がせること。
オーバーライド:スーパークラスのメソッドと戻り値の方、メソッド名、シグニチャが同じメソッドを再定義できること。

継承とオーバーロード

早速だけど説明するよりコードを見た方がはやいのでサンプルコードを書くよ。

1.  class SuperSample {
2.      String val = "Super";
3.      void print() {
4.          System.out.print(val);
5.      }
6.  }
7. 
8.  class SubSample extends SuperSample {
9.      String val = "Sub";
10.  }
1.  public class Main {
2.      public static void main(String[] args) {
3.          SuperSample super = new SuperSample();
4.          SuperSample sub = new SubSample();
5.          System.out.print(super.val);
6.          System.out.print(sub.val);
7.          super.print();
8.          sub.print();
9.      }
10. }

上記のようなコードで、メインクラスを実行した場合に出力される文字がなにかを考えていくよ。
結論から書くと、SuperSuperSuperSperと出力されるよ。
前提として、サブクラスのインスタンスはスーパークラスのインスタンスと差分のインスタンスで構成されるので、SubSampleクラスには2つのフィールドが存在することになっているよ。ここでは、その2つのフィールドのどちらが利用されるのかを理解する必要があって、その見極め方は次の通り。

フィールドを参照した場合、変数の型で宣言された方
メソッドを呼び出した場合、メソッド内の指示に従う

つまり、mainクラスの5,6行目ではフィールドを参照していて、どちらも変数の型はSuperSample型なので、どちらもSuperSampleのフィールドが出力されるよ。
mainクラスの7,8行目ではメソッドを呼び出していて、print()はSuperSampleクラスに定義されているので、同じクラスに定義されているフィールドを出力するよ。従って、どちらもSuperSampleクラスのフィールドが出力されることになるよ。

でも、ここでもし、SuperSampleクラスのメソッドprint()をSubSampleクラスで再定義(オーバーライド)していると、少し動きが変わるよ。

1.  class SuperSample {
2.      String val = "Super";
3.      void print() {
4.          System.out.print(val);
5.      }
6.  }
7. 
8.  class SubSample extends SuperSample {
9.      String val = "Sub";
10.     void print() {
11.         System.out.print(val);
12.     }
10.  }

このように、SubSampleクラスでSuperSampleクラスのメソッドをオーバーライドすると、mainクラス8行目で、SubSampleクラスのメソッドprint()が動作するので、Subと表示されるようになるよ。
つまり、出力結果としては、SuperSuperSuperSubとなるよ。
これは、SubSample(差分インスタンスを持っている状態のもの)をSuperSample型として扱っているだけで、差分は持っている状態だよ。その差分にオーバーライドしたされたメソッドがあればそちらを優先して利用するからだよ。

まとめ

継承とオーバーライドについて押さえておくべきポイントをまとめるよ。

フィールドを参照した場合、変数の型で宣言された方
メソッドを呼び出した場合、メソッド内の指示に従う
オーバーライドしたされたメソッドがあればそちらを優先して利用する
1
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
1
0