Uma dúvida que encontrei no Whizlabs, sobre retornos covariantes. Qual a regra para determinar qual método será invocado? Se fosse um caso normal de herança, o método invocado seria o da instancia, porém como essa história funciona no caso dos covariantes?
[]'s
class A {
int x = 2;
}
class B extends A{
int x = 1;
}
public class ExemploCovariante {
public A getObject(){
return new A();
}
public static void main(String[] args) {
ExemploCovariante e = new ExemploCovarianteDerivada();
e.getObject();
}
}
class ExemploCovarianteDerivada extends ExemploCovariante {
public B getObject(){
return new B();
}
}
Nesse caso ele vai fazer polimorfismo normal. ou seja vai chamar public B getObject(){}
A coisa fica mais interessante se vc considerar o código abaixo
class A {
int x = 2;
}
class B extends A{
int x = 1;
}
public class ExemploCovariante {
public A getObject(){
return new A();
}
public static void main(String[] args) {
ExemploCovariante e = new ExemploCovarianteDerivada();
System.out.println(e.getObject().x); // Mostra 1 ou 2 ?
}
}
class ExemploCovarianteDerivada extends ExemploCovariante {
public B getObject(){
return new B();
}
}