次のようなプログラムを書きました。
class A<T> {
public String display(T t) {
return t.toString();
}
}
public class Test extends A<String> {
public String display(Object o) { //ここでコンパイルエラー
return o.toString();
}
public static void main(String[] args) {
Test test = new Test();
test.display("hello, world");
}
}
上で示した部分でコンパイルエラーが出ました。エラー内容は
名前の競合:型Testのメソッドdisplay(Object)は型A<T>のメソッドdisplay(T)と同じerasureを持っていますが、オーバーライドしません。
というものでした。この場合、
public class Test extends A<String>
と、TがStringであることを明示しているので、このプログラムではdisplay(Object)はdisplay(T) をオーバーロードしているのではないのでしょうか。
もしくは、もしdisplay(Object)とdisplay(T)が同じerasureを持っているなら、それでオーバーライドしていることにはならないのでしょうか?
お礼
回答ありがとうございます。 イレイジャについてもっと勉強してみます。 ありがとうございました。