Boa tarde Guilherme, entendi sua questão, este exemplo que passou e bastante claro, é muito semelhante aos do vídeo, os exemplos do videos são todos muito claros, mas quando se trata dos exercícios, vemos situações que não foram exatamente abordadas no vídeo, o que nos obriga a abstrair mais um pouco o entendimento, pensar um pouco mais, então eu acabei ficando com muita dúvida na forma correta de se ler o CAST para entender que perguntas devo fazer para entender a questão.
No trecho de código simples abaixo, é fácil de entender porque o compilador conseguiu compilar, na minha leitura eu faço da seguinte forma:
A variável "v" que é de um tipo Veiculo só pode ser convertida para Moto se o objeto para o qual ela referência, ou seja, que foi dado um new, herda de Veiculo, ou seja, se Moto herda de Veiculo.
Então neste exemplo eu leio da direita para esquerda, ou seja, eu quero "converter" tipo da classe da direita para o tipo da classe da esquerda que está entre os parenteses "(Moto)",
class Veiculo{}
class Moto extends Veiculo{}
class Carro extends Veiculo{}
public class ZTeste {
public static void main(String[] args) {
Veiculo v= new Carro();
Moto m = (Moto) v;
}
}
Sendo assim para o código em questão que informei antes:
D d = (D) (Y) (B) new D();
eu gostaria de entender de devo ler algo tipo assim:
(Y) pode ser "convertido" para (D) e (B) pode ser "convertido" para (Y) e new D() pode ser "convertido" para (B)???
OU eu deveria ler
(Y) pode ser "convertido" para (D) e (B) pode ser "convertido" para (D) e new D() pode ser "convertido" para (D)???