Mesmo vc fazendo o cast, a “instância verdadeira” é de KKK, e como o método foi sobreescrito em KKK, vai ser executado o método de KKK.

Re:duvida cruél
4 Respostas
Olha pelo que pude perceber é o seguinte mesmo vc fazendo o cast ele ainda continua referenciando Kk();
pq vc faz cast tipo ficaria assim:
Yy yy = new Kk();
como vc sobreescreveu o método print em Kk, mesmo o objeto sendo do tipo Yy ele aponta para Kk();
[]'s
Pai objeto = new Filho();
Nesse exemplo, o objeto filho é declarado como uma instância de Pai. Assim, método sobrescritos na classe Filho assumirão seu comportamento e métodos declarados somente em Filho não poderão ser acessados por esse objeto.
Olhe o exemplo e veja se ficará mais claro:
Yy y = new Kk(); // y é instância de Yy
Kk k = (Kk)y; // casting da instância y de Yy para Kk
objFilho.print(); // imprimirá kkk
Yy y = new Yy(); // y é instancia de Yy
Kk objFilho = (Kk)y; // casting de y para Kk
objFilho.print();
Neste caso daria pau, porque estaria tentando dar downCasting, inexistente em java.
Yy y = new Yy(); // y é instancia de Yy
Xx objFilho = (Xx)y; // casting de y para Kk
objFilho.print();
Neste caso não daria pau, mas imprimiria yyy, porque objFilho no método print apontará para a instância y, mas assumirá os métodos de Xx.
public class Xx {
void print(){
System.out.println("xxx");
}
}
public class Yy extends Xx{
void print(){
System.out.println("xxx");
}
}
public class Kk extends Yy {
void print(){
System.out.println("kkk");
}
public static void main(String[] args) {
Kk k = new Kk();
k.print();
((Yy) k).print();
((Xx) k).print();
}
}
Imprime KKK , KKK , KKK
Pq impreime isso já que esta sendo feito o (casting) !?
Não era para imprimir isso kkk,yyy,xxx ?
Duvida cruél .