しかし、f(オブジェクト)をf(文字列)またはf(整数)に変更すると、次のコードはコンパイルされません。 私は主題についての他の記事を読んだことがありますが、まだそれは得られません。どのような方法を使用するのがコンパイラには分かりません (新しいインスタンスA a = new B();)オーバーライドされたメソッドが型パラメータを指定しない場合、オーバーライドできないのはなぜですか?
public class SampleTester {
public static class A {
public void f(int x) { System.out.print("1"); }
public void f(Object x) { System.out.print("2"); }
}
public static class B extends A {
public <T> void f(T x) { System.out.print("3"); } //compiler error
}
public static void main(String[] args) {
A a = new A();
B b= new B();
a.f(3);
a.f("foo");
b.f(3);
b.f("foo");
}
}
、私はそれがまだコンパイルされませんObject t
からT x
を変更すると、その違いは何ですか?また、なぜAの関数をオーバーライドしないのか? 。問題は、ということである
public void f(int x)
public void f(Object x)
public <T> void f(T x)
:(クラスB
がA
を拡張し、従ってA
中に存在するすべてのメソッドを継承型消去
なぜこの質問が下落したのかわかりません。それはかなり良い質問IMOのようです。 – CKing
私はdownvoteしなかったが、明白な質問は "だからエラーメッセージは何ですか?" *何かがコンパイルされない(またはコンパイルされますが、例外をスローする)という質問は、エラーの詳細を含める必要があります。 –