Conta cc = new ContaCorrente(); --> O que significa?

Quando criamos a instância cc em:

Conta cc = new ContaCorrente();

O que significa? O cc será do tipo Conta?
Então, o que significa o lado direito? Pq colocar “new + Classe-filha”?

obs: Conta é classe-mãe de ContaCorrente.

cc (a referência) é do tipo Conta. O objeto para o qual cc aponta é do tipo ContaCorrente. Isso implica que a partir da referência (cc) vc só consegue invocar métodos do tipo da referência, por exemplo, se ContaCorrente possuir algum método a mais do que é herdado, vc não consegue acessá-lo pela referência diretamente. Mesmo que a partir da referência vc só tenha acesso aos métodos declarados naquele tipo, a versão que será invocada é aquela que o tipo do objeto possui, no caso, ContaCorrete. O nome disso é invocação dinâmica ou invocação tardia, pois é necessário decidir a versão do método que será invocado com base no tipo do objeto, não da referência.

Veja se entendi:

Será criada uma instância do tipo ContaCorrente. Porém, cc é do tipo Conta e, com isso, não terá acesso aos métodos e atributos de ContaCorrente. É isso?

Quase isso. Veja se entende o meu desenho.


É um esboço, quase um pseudocódigo. sout() seria um System.out.println(). Não coloquei modificadores de acesso nem tipo de retorno dos métodos. É mais um esquema para vc entender.

Você pode invocar os métodos de ContaCorrente, fazendo um casting.

public class Testador {
	    public static void main(String[] args) {
            //Cria o objeto
    		Conta cc = new ContaCorrente();
    		//Casting
    		((ContaCorrente) cc).chamaMetodoDeContaCorrente();
    	}
}

Em outras palavras “Estará dizendo ao compilador que tem a certeza de que o objecto em cc é uma ContaCorrente”

Agradeço a atenção de todos!!

Principalmente, ao @davidbuzatto pelo desenho!!!

import java.util.Scanner;

public class lapr1Interativo {
     public static void main(String[] args) {
           Scanner ler = new Scanner(System.in);

           int n = 200; // tamanho do vetor
           int v[] = new int[n]; // declaração do vetor "v"
           int i = 0; // índice ou posição
           boolean fim = false;

           // Entrada de Dados
           while (i < v.length) {
           System.out.printf(“Informe %2do. valor de %d: “, (i++), n);
           v[i] = ler.nextInt();
           if (fim) {
           System.out.printf(””);
       }
    }
}

É isso certo?