In Java, nehme ich drei Klassen haben, erstreckt sich C von B, die von A.Upcasting in java
class X {
interface A {}
interface B extends A {}
interface C extends B {}
void f(A a) {}
void test() {
C c = new C()
B b = (B) c;
f(b);
}
}
Wenn ich in test()
, wie oben gezeigt, so etwas wie dies erstreckt:
C c = new C()
B b = (B) c;
f(b);
f()
akzeptiert b
als Typ C
seit C
und B
beide von A
erstrecken. Ich wollte f()
erhalten b
als Typ B
und nicht Typ C
.
Gibt es trotzdem, um diese Upcasting zu erzwingen?
Dies ist genau das, was ich versuche zu verstehen. Ich möchte, dass der Parameter B-Verhalten aufweist. Ich denke, ich muss eine neue B-Instanz von C erstellen, bevor ich sie an f übergebe. Vielen Dank. – simao
Wenn Sie möchten, dass f auf einem B operiert, warum erstellen Sie nicht einfach ein B? Wo kommt C rein? – tpdi