ゆいの学習帳

英語・プログラミング・プロモーション・日々のこと、エトセトラ。気になったことや勉強したことを、メモしていきます。

<Java>スーパークラスとサブクラス(多態性)

サブクラスは、スーパークラスの変数で扱うこともできる

オブジェクトを指す変数のクラスに関係なく、オブジェクト自身のクラス(newしたクラス)によって、適切なメソッドが呼び出されます。

例)

Car cars[];
cars = new Car[2];

cars[0] = new Car();
cars[0].setCar(1234,20);

cars[1] = new Prius();
cars[1].setCar(4567,30);

for(int i = 0; i < cars.length; i++)
{
  cars[i].show();

}

 

で、PriusクラスがCarクラスのサブクラスだった場合、

cars[1].show()では、Priusクラスで定義したメソッドが呼び出されるということ。

したがって、オブジェクトで場合分けしてコードを記述したり、たくさんメソッドを覚える必要はありません。

オーバーライドがおこなわれるので、スーパークラスとサブクラスのオブジェクトをまとめて扱えます。

このように、1つのメソッド名がその状況に応じて色々な働きをすることを多態性と呼ぶ。

オーバーロードとオーバーライド

オーバーロード

同じクラスでメソッド名が同じで引数の形式が異なるメソッドを定義すること

オーバーライド

サブクラスで、スーパークラスのメソッドとメソッド名・引数の形式が全く同じであるメソッドを定義すること