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.
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.
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”
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?