to aqui estudando pra certificação no site www.javaranch.com (muito bom por sinal). Tô bem longe d poder fazer a prova, mas enfim… Tem lá um joguinho q vc tem q responder as perguntas para colocar as vacas no celeiro… euaehuae bem engraçado…
Errei uma pergunta e eu queria tirar uma dúvida… a pergunta é:
Any object can always be referenced by a variable which is of superclass type… becouse the child/subclass object is guaranteed to have the methods of the superclass.
Mas se a subclasse tiver um método a mais? o objeto myX vai ter esse método? pq?
Muito bem… analisando as duas classes independente da pergunta, podemos perceber que a classe X é uma superclasse (pois é herdade de Y), consequentemente Y é subclasse de X (pois herda a classe X). Portanto, Y é subclasse da classe X (conforme afirmado corretamente na pergunta).
O código abaixo da pergunta é válido, pois toda “referência” de superclasse pode receber referência de subclasse (o que está acontecendo no exemplo), mas o contrário não é verdadeiro (pode através de cast, se pertencer a hierarquia).
Vc pergunto se: Mas se a subclasse tiver um método a mais? o objeto myX vai ter esse método? pq?.
Falando de uma maneira fácil, se a subclasse tiver quantos métodos for necessários, o objeto myX não vai ter esse método, mas como ele pode receber uma referência de subclasse o objeto vai “saber” que ele contém uma instância de um objeto myY e consequentemente todas suas funcionalidades.
Espero ter ajudado…
Até mais.
N
netoPJ
Entendi…
Acho q estou com os vícios de C ainda. Achei q não tinha sentido pq em C, se vc tem uma estrutura q tem um campo X outra estrutura com um campo Y, mesmo q elas sejam iguais, a referência de uma não pode virar outra… tipo, um ponteiro pra X, é pra X… se vc quiser compiar tem q copiar campo por campo… mas blz. Obrigado.
R
RobsonPJ
O objeto myX saberá que está referenciando um objeto myY, mas não poderá chamar o metodo2(). myX somente poderá chamar este método se ele for declarado na classe X. Este é o princípio do polimorfismo.
Agora vamos linha por linha…
a primeira linha sem segredos… a segunda linha funciona pq?!
Pq eu herdando de pessoa posso ser assigned para uma Pessoa, porém uma Pessoa qualquer não terá o m’todo implementado comprarFerrari() (dentro da classe Juliano), pois nem todos são ricos como o Juliano =)
ou seja, o objeto p terá acesso a todos os métodos que uma pessoa normal tem acesso, porém não ao que um Juliano tem acesso.
Na terceira linha não funciona pq?! Pq uma Pessoa nãoo tem os métodos que um Neto precisa, como por exemplo, comprarPorche(). ou seja, vc não pode assign um objeto Pessoa a um objeto Neto, pois este objeto p não tem os métodos que vc precisa… ou vc gostaria de sair no prejuizo?!
haiuehiauehaiuh