Dúvida em "cast duplo"

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

[code]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;
}
}[/code]

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

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.

[quote=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.[/quote]

É isso mesmo.

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: