Der folgende Code kompiliert jedoch nicht, wenn ich f (Objekt) zu f (String) oder f (Integer) es kompiliert. Ich habe die anderen Beiträge über das Thema gelesen, aber ich verstehe es immer noch nicht, wie kommt der Compiler nicht, welche Methode zu verwenden ist (im Falle einer neuen Instanz A a = neue B();)Warum können überschreibende Methoden keinen Typparameter angeben, wenn die Methode "overriden" nicht funktioniert?
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");
}
}
Wenn ich T x
-Object t
ändern es immer noch nicht kompilieren, so was ist der Unterschied? und außerdem, warum überschreibt es nicht nur die Funktion von A? . (Beide die gleiche Signatur nach Typ Löschung
Ich bin nicht sicher, warum diese Frage abgelehnt wurde. Es scheint eine ziemlich gute Frage zu sein, IMO. – CKing
Während ich nicht downvote, wäre eine offensichtliche Frage "Also, was ist die Fehlermeldung?" * Jede * Frage, die besagt, dass etwas nicht kompiliert wird (oder kompiliert, sondern eine Ausnahme auslöst), sollte die Fehlerdetails enthalten. –