Dúvida em "cast duplo"

3 respostas
T

Alguém pode me explicar o que acontece na linha 11 do código abaixo?

interface Foo{}

class Alpha implements Foo{}

class Beta extends Alpha{}

class Delta extends Beta
{
	public static void main(String[] miami){
		Beta x = new Beta();
		Beta b = (Beta)(Alpha)x;
	}
}

Por que o inverso (Alpha)(Beta) não é permitido?
Obrigado! :D

3 Respostas

andeb

Bom… vamos lá, acredito que seja isso, se estiver errado, por favor, me corrijam:

O compilador irá executar o cast da direita para a esquerda, ou seja, primeiro ele fará o casta para Alpha e depois para Beta.
O inverso não é permitido por que Alpha é mais genérico que Beta, um Beta É-UM Alpha porém um Alpha não é um Beta. Seria a mesma coisa que dizer:

Não compila. Um Alpha não cabe em um Beta. Porém um Beta cabe em um Alpha.

Acredito que seja isso.

Abraços.

B

andeb:
Bom… vamos lá, acredito que seja isso, se estiver errado, por favor, me corrijam:

O compilador irá executar o cast da direita para a esquerda, ou seja, primeiro ele fará o casta para Alpha e depois para Beta.
O inverso não é permitido por que Alpha é mais genérico que Beta, um Beta É-UM Alpha porém um Alpha não é um Beta. Seria a mesma coisa que dizer:

Não compila. Um Alpha não cabe em um Beta. Porém um Beta cabe em um Alpha.

Acredito que seja isso.

Abraços.

É isso mesmo.

slompo

Bom não sei se to certo mas vamos tentar =P Qualquer coisa me corrijam =D

Pelo que vejo a Classe Alpha é a classe mãe de Beta, sendo assim Beta é um aprimoramento da classe Alpha pois pode vir a ter mais metodos, atributos, etc…

O modelo da Classe Alpha (mãe) sendo assim é possivel o cast de uma classe filha

Beta x = new Beta();
Alpha a = (Alpha)x;

No entanto a Classe filha não pode receber um cast com um objeto de mãe, pois a classe mãe pode não conter todos os metodos da classe filha

Errado
Beta x = new Beta();
Beta b = (Alpha)x;

Bom espero ter ajudado =P

[editado] foi mal acabei postando ser ver que já havim respondido :oops:

Criado 12 de janeiro de 2010
Ultima resposta 13 de jan. de 2010
Respostas 3
Participantes 4