Não entendi muito bem esse exemplo. Sei que o polimorfismo só funciona para métodos e não para variáveis.
ex:
class A{
int x=5;
public int teste(){
return x;
}}
class B extends A{
int x=6;
public int teste(){
return x;
}}
public class Teste{
public static void main(String args[]){
A a=new B();
System.out.println(a.x); // imprime 5
System.out.println(a.teste()); // imprime 6
beleza!! mas esse outro está muito confuso
ex:
class A{
int x=5;
}
class B extends A{
int x=6;
}
public class CovariantTest{
public A gerObject(){
return new A();
}
public static void main(String args[]){
CovariantTest c=new SubCovariantTest();
System.out.print(c.getObject().x); // imprime 5
}
}
class SubCovariantTest extends CovariantTest{
public B getObject(){
return new B();
}
}
Minha dúvida é a seguinte.
Quando chamo c.getObject(), estou chamando o método da class SubCovariantTest que retorna um objeto B. Correto?
Porque quando chamo c.getObject().x ele retorna o valor de x da class CovarianteTest se o retorno do método é um objeto B?
Alguém pode me explicar?