ポリモーフィズムは、異なるクラス(サブクラス)が共通のインターフェース(スーパークラスで定義されたメソッド)を持ちながら、それぞれ異なる振る舞いを実装することを指す。
例として、図形というスーパークラスがあり、四角形、円といったサブクラスがある場合を考える。これらのサブクラスは、図形クラスから継承され、面積を計算するという共通のメソッドを持つが、その計算方法はクラスによって異なる。
class 図形 {
double 面積を計算する() {
return 0;
}
}
class 四角形 extends 図形 {
double 幅;
double 高さ;
四角形(double 幅, double 高さ) {
this.幅 = 幅;
this.高さ = 高さ;
}
@Override
double 面積を計算する() {
return 幅 * 高さ;
}
}
class 円 extends 図形 {
double 半径;
円(double 半径) {
this.半径 = 半径;
}
@Override
double 面積を計算する() {
return 半径 * 半径 * Math.PI;
}
}
この例では、四角形と円は、それぞれ異なるフィールド(幅、高さ、半径)を持ち、面積を計算するメソッドをオーバーライドして独自の計算を行う。しかし、どちらのクラスも図形クラスのサブクラスであるため、図形型の変数として扱うことができる。
図形(型) ある図形;
ある図形 = new 四角形(10, 5);
System.out.println("四角形の面積: " + ある図形.面積を計算する());
ある図形 = new 円(7);
System.out.println("円の面積: " + ある図形.面積を計算する());
このように、ポリモーフィズムを使用することで、異なる型のオブジェクトを同一のインターフェース(この場合は面積を計算するメソッド)を通じて操作することができる。