Duvida orientação a objetos

public abstract class A {
 public A() {
	 System.out.println("A");
 }
 
 public abstract void metodo();

}

public class B extends A{

@Override
public void metodo() {
	System.out.println("B");
	
}

}
public class Main {

public static void main(String[] args) {
	
	 A a= new B();
	 a.metodo();
	
	 
}

}

porque na primeira linha do Main é impresso A e não B, seria por causa do construtor??

Vamos lá.
B está relacionado com A de tal forma que B É UM A.
Isso permite que você faça isso:

A a = new B();

O que define qual mensagem será exibida não é o que vem após a igualdade, mas, o que está antes da variável, no caso, A.
Basicamente, você diz, com esta linha: java, aloque um objeto A, chamado a a partir da parte de B que é um A.
Confuso? Mais ou menos.
B é um A, correto? Na prática, você diz que B é feito de A mais alguma(s) coisa(s). Assim sendo, se você faz

A objeto = new B();

Está dizendo que não quer saber o que B tem de específico (não nesse momento). Quer apenas a parte de B que se refere ao A.

1 curtida

entendido