Referência de Objetos

Time GUJ, boa noite.

Preciso de uma ajuda, pois estou dando altas cabeçadas aqui e tentei buscar em diversos fóruns e não encontrei uma explicação.

Tenho o seguinte código:

public class Documento {

private String autor = "autor";
private int dataDeChegada;

public void criarDocumento(String nome, int num) {
    autor = nome;
    dataDeChegada = num; 
}
public void imprimir( ) {
    System.out.println( "Imprime o conteúdo de um Documento");
}
public void editar ( ){
    System.out.println("Edita o contúudo de um Documento");
}

public class Carta extends Documento {

private String transporte;

public void anexar() {
    System.out.println( "Anexa à Carta.");
}

}

public class ExemploPolimorfismoSemRedefinicao {

public static void main(String args[]) {
	
    Documento d = new Documento( );
    d.imprimir( );
    
    d = new Carta( );
    d.imprimir( );
       d.anexar();
    
       ((Carta)d).anexar( );	    
}

}

Gostaria que me ajudassem a entender duas coisas:

1º) Na classe ExemploPolimorfismoSemRedefinicao quando “d = new Carta( );” nesse momento é criado um objeto somente do tipo Carta ou também será do tipo Documento? Entendo que não há nenhuma referência aqui, estou certo?

2º) Se eu estiver certo que não há nenhuma referência, é por isso que está errado o código quando “d.anexar();”?
Pelo que vi, ele só aceitaria o acesso ao método através do Downcasting " ((Carta)d).anexar( );"

Agradeço desde já!

Olá, respondi uma questão que acho que tem a ver com tua dúvida bem aqui. Espero que ajude.