Herança java

public class A {
	void metodo() {
		System.out.println("A");
	}
}
public class B extends A {
	void metodo() {
		System.out.println("B");
	}
}
public class Main {
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		B b1 = (B) new A();
		
		a.metodo();
		b.metodo();
		b1.metodo();
	}
}

Gostaria de saber porque a linha B b1 = (B) new A(); da erro de execução. Alguém poderia me tirar essa dúvida?

A não é um subtipo de B, por isso o programa não compila.

Em outras palavras, uma referência do tipo B só pode apontar para o próprio tipo B ou para tipos que herdam de B, o que não é o caso de A.

1 curtida

Complementando a resposta do @lvbarbosa, uma forma fácil de você entender quando pode ou não pode fazer o cast de um tipo de um objeto de um tipo de dado para um outro tipoé fazer a seguinte pergunta:

O tipo A é um tipo B?
Se for, então pode fazer cast.

Quando você tem uma relação de herança, onde:

B extends A

Você está dizendo que:

B É um tipo A

Mas:

A NÃO É um tipo B
1 curtida

foi o que pensei, mas como não tinha certeza se meu raciocinio estava certo decidi tirar a duvida. muito obrigado por esclarecerem