我有这段代码:
class X {
int x = 1;
}
class Y extends X {
int y = 2;
}
class Z extends Y {
int z = 3;
}
class A {
public Y metodo1(Y y) {
System.out.println("Metodo1 de A");
return new Y();
}
public Y metodo2(Y y) {
System.out.println("Metodo2 de A");
return new Y();
}
}
class B extends A {
public X metodo1(Y y) {
System.out.println("Metodo1 de B");
return new X();
}
public Z metodo2(Y y) {
System.out.println("Metodo2 de B");
return new Z();
}
public void metodo3() {
System.out.println("Metodo3 de B");
}
}
class C extends A{
public Y metodo1(X x) {
System.out.println("Metodo1 de C");
return new Y();
}
public Y metodo2(Z z) {
System.out.println("Metodo2 de C");
return new Z();
}
public void metodo3() {
System.out.println("Metodo3 de C");
}
}
public class DynamicBinding {
public static void main(String[] args) {
A b = new B();
A c = new C();
C c1 = new C();
X x1 = b.metodo1(new Y());
X x2 = b.metodo2(new Y());
b.metodo3();
X x3 = c.metodo1(new X());
X x4 = c.metodo2(new Z());
c.metodo3();
X x5 = c1.metodo1(new Y());
X x6 = c1.metodo1(new X());
}
}
我知道有一些错误,比如协变返回类型
public X metodo1(Y y) {
System.out.println("Metodo1 de B");
return new X();
}
或者b.metodo3();
不存在,但我的问题是关于这个:
X x5 = c1.metodo1(new Y());
X x6 = c1.metodo1(new X());
Eclipse 没有向我显示任何错误,但我认为它们具有协变参数,这在 Java 中是不允许的。我错过了什么?(也许X x5 = c1.metodo1(new Y());
其中调用了A的metodo1,但我不明白另一个)。
谢谢!