/ / Java instanceof Inner Class não pode converter erro - java, casting, classes internas, instanceof

A instância Java da Classe Interna não pode converter erro - java, conversão, classes internas, instância de

Estou trabalhando com Java e tentando usar"instanceof" para determinar se um objeto retornado é uma instância em uma classe. O código (não o meu código) com o qual tenho que trabalhar é apresentado dessa maneira. A questão é por que instanceof não pode ser convertido corretamente para determinar se o objeto é uma instância da classe?

public class MainClass{
public static void main(String[] args){
Class1 myClass1 = new Class1();
if(myClass1.getObject() instanceof Class1){}  ///<--- Cast Error
}
}


public class Class1 extends ObjectClass{

public InnerClass1 getObject(){
return (InnerClass1)object;
}

public static abstract class InnerClass1 extends Class2{}
}


public class Class2 {}


public class ObjectClass {
final Class2 object = new Class2();
}

Como você pode ver, o objeto é uma instância deClass2. Ao chamar o método "get", ele lança o objeto para digitar InnerClass1, que estende a Class2. InnerClass1 é uma subclasse de Class1. A verificação "instanceof" deseja verificar se o objeto é uma instância da Class1, mas falha com um erro não pode ser convertido. Por que é isso? Obrigado pela ajuda.

---EDITAR--- Apenas um lembrete, este NÃO é o meu código. Foi-me dado isso para trabalhar e estava tendo alguma dificuldade em analisar por que a instância do não estava funcionando. As respostas foram ótimas e eu entendo agora. Obrigado!

Respostas:

1 para resposta № 1

InnerClass1 é uma subclasse de Class1

Não InnerClass1 extends Class2 não Class1, Além disso Class2 não estende nenhuma classe, portanto ela não pode ser um subtipo explícito ou implícito de Class1 o que significa que a cotação acima está incorreta.


De qualquer forma em

myClass1.getObject() instanceof Class1

você está verificando se o resultado de myClass1.getObject() é subtipo de Class1.

Mas o compilador sabe que getObject() é declarado como

public InnerClass1 getObject(){..}

por isso devo instância de retorno de InnerClass1 ou seu subtipo. Mas desde InnerClass1 e Class1 não são relacionado e eles não podem ter ancestral comum nem filho comum (não há herança múltipla em Java para classes, portanto, qualquer subclasse pode ter apenas uma classe pai), é impossível ter instância de InnerClass1 (ou seu subtipo), que também será do tipo Class1.

Portanto, como essa instância não pode existir (não estou incluindo null aqui) o compilador não permite escrever código com base na suposição de que essa instância possa existir.