Re:duvida cruél

4 respostas
fabiozoroastro

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.
:slight_smile:

4 Respostas

alberto_ribeiro

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

T

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

T

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.

I
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 .

Criado 22 de maio de 2007
Ultima resposta 22 de mai. de 2007
Respostas 4
Participantes 4