Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sobre o casting para Y


interface Z {}
interface W {}
interface Y extends Z, W {}
class B {}
class C extends B implements Y {}
class D extends B implements Z, W {}
class E extends C {}
class A {
  public static void main(String[] args) {
    System.out.println(((B) (Z) (W) (Y) new D()) instanceOf D);
  }
}

Resposta do instrutor:

Não compila dentro do método main.

O código não compila: instanceof é minúsculo.

Ok, o instanceof é minúsculo. Minha dúvida é: é possível pegar o D e transformar para Y? acredito que nao seja possivel pois D nao implementa D, correto? Esse também é um dos motivos para não compilar, correto?

1 resposta
solução!

Oi Vinicius, tudo certo?

Neste cenário, quando você tentar executar o código, ele sempre irá lançar uma exceção do tipo java.lang.ClassCastException, já que como você observou, D não implementa Y .

Mas neste caso, escrevendo instanceof da maneira correta, o código compilaria, porque Y é uma interface e você poderia ter uma subclasse de D que implementa Y. Algo como:

// ...
class B {}
class C extends B implements Y {}
class D extends B implements Z, W {}
class E extends C {}

class Jaca extends D implements Y {}

class A {
  public static void main(String[] args) {
    D jaca = new Jaca();
    Y y = (Y) jaca;
  }
}

O código acima compila e executa sem qualquer problema. É por este motivo que o compilador não dá erro quando você faz um casting pra um tipo que é uma interface (Y) que não tem qualquer relação com a classe (D).

Faz sentido? Abraço!