私はこのコードを持っています:
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 を呼び出しているのかもしれませんが、もう一方はわかりません)。
ありがとう!