オーバーライドとは同じ名前のメソッドで複数の振る舞いをすることだと前の記事で書いた。オーバーライドを使うことで、クラスの役割を分離(関与を分離)し、簡明で変化に強いプログラムを作ることができると述べた。今回、スーパークラスの型で宣言した変数をサブクラスでnewすることによって、サブクラスのインスタンスを作る。こうして作ったインスタンスとオーバーライドの技術を組み合わせることでさらに変化に強いプログラムを作成する子ができる。こういった技術はjavaの多様性(ポリモーフィズム)を色濃く反映している。
以下に例を示す。
Person[] p = new Person[3];
p[0] = new Person("田中" , 27);
p[1] = new Student("山田" , 20 , 3);
p[2] = new Person("佐藤" , 34);
for(int i=0 ; i < p.length ; i++){
p[i].display();
System.out.println("");
}
実行結果
氏名:田中 年齢:27
氏名:山田 年齢:20 学年:3
氏名:佐藤 年齢:34
p[1]はPerson型の変数だが、Studentクラスでnewされているため、Studentクラスのインスタンスとして扱われる。
ここでは書いていないが、StudentクラスはPersonクラスのサブクラスであり、そのメンバーにはdisplayをオーバーライドしている。これにより、displayメソッド内のplint文は学年を表示するか否かには全く関与せず、結果として学年を表示している。このことは、オーバーライドと継承をうまく組み合わせてポリモーフィズムを実現していることを示している。