はじめに
Javaでメソッドをオーバーライドする時は、サブクラスのメソッドはスーパークラスの
メソッドのシグネチャ(メソッド名と引数列の型)に合わせる必要があります。
引数列の型が同じである必要があるということは知っていましたが、引数の数が
違うとどうなるか?
コンパイラに怒られることはわかっていつつ、試してみました。
例として、スーパークラスのメソッドは下記のように定義します。
class Papa {
...
int calParameter(int x, int y) {
int sum_parameter = x + y;
return sum_parameter;
}
...
}
シグネチャを合わせて正しくオーバーライド
説明するまでもありませんが、下記のようにオーバーライドすると、当然正常に
コンパイルできます。
class MySon extends Papa {
...
@Override
int calParameter(int x, int y) {
int diff_parameter = x - y;
return diff_parameter;
}
...
}
引数の数を増やしたり、減らしたりしてみる
引数の数を増やす:
class MySon extends Papa {
...
@Override
int calParameter(int x, int y, int z) {
int diff_parameter = (x - y) * z;
return diff_parameter;
}
...
}
引数の数を減らす:
class MySon extends Papa {
...
@Override
int calParameter(int x) {
int diff_parameter = x;
return diff_parameter;
}
...
}
上記二つのパターンでコンパイルすると、いずれも下記のように怒られました。
$ javac MySon.java
MySon.java:18: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
まとめ
今回のケースは想像はついてましたが、まとめると
メソッドをオーバーライドするには
- メソッドの名前が等しく、かつ
- 引数列の型と、引数の数が等しいこと
となるようです。