Eu não entendi qual é a diferença entre esses dois tipos de instância. Ex: ContaCorrente é filha de Conta ContaCorrente cc = new ContaCorrente(); Conta cc = new ContaCorrente();
Eu vi a explicação, mas ainda não ficou claro pra mim.
Eu não entendi qual é a diferença entre esses dois tipos de instância. Ex: ContaCorrente é filha de Conta ContaCorrente cc = new ContaCorrente(); Conta cc = new ContaCorrente();
Eu vi a explicação, mas ainda não ficou claro pra mim.
Oi Sérgio, tudo bem? Apesar da instância ser criada da mesma classe ContaCorrente
, os objetos finais pertencem a classes diferentes.
ContaCorrente cc = new ContaCorrente();
Este é o caso mais simples, onde o objeto cc tem uma instancia da classe ContaCorrente e também é deste tipo. Agora quado fazemos:
Conta cc = new ContaCorrente();
também funciona, só por que a classe ContaCorrente é filha da classe Conta. Isso faz parte do conceito de polimorfismo. O objeto agora é do tipo Conta, mas contém uma instancia da classe ContaCorrente.
Entende?
Olá, ok, entendo, mas ainda tenho dúvidas:
Se eu instanciar uma conta assim:
Conta cc = new ContaCorrente();
Isso seria uma instância do tipo Conta, certo? Ou seja, através dele eu só poderia chamar os métodos de uma Conta, apesar dele fazer referência a uma ContaCorrente.
Mas é ai que eu não consigo entender, em qual situação utilizar esse tipo de instanciamento. Porque eu usaria ele ao invés desse:
Conta cc = new Conta();
Obrigado pela sua resposta!
Você concorda que naturalmente não existe uma conta que seja só conta? Toda conta tem seu tipo: Poupança, Corrente, Salário, pegou a ideia? Beleza.
Essencialmente, você nunca criaria conta como no segundo caso, mas o primeiro caso tem uso.
Situação: Imagine o processo de transferência. O processo não pede que seja uma conta específica, ele só precisa de uma conta. Neste caso, você pode fazer como no primeiro caso. Assim o objeto instância de ContaCorrente
se comportaria como uma simples Conta
e o processo seria realizado normalmente.
Isso faz com que com um único código, você possa usar qualquer tipo de conta na transferencia, não importando o tipo, desde que seja uma conta, o processo será feito. O detalhe é que, pode não ter ficado claro, mas a classe Conta tem o que é comum a todas as contas. E as outras classes têm o que é específico de cada uma.
É complicadinho de entender no começo esses conceitos de polimorfismo, mas aos poucos isso vai esclarecendo, de acordo com o que for estudando.
Como material de apoio, deixo o link do capítulo que fala sobre esse assunto da apostila da Caelum. (é uma boa fazer a leitura por completo já que está começando)
https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-polimorfismo/
Oi pessoal
Só esclarecer uma coisa:
Conta c = new ContaCorrente
A variável c
não é um objeto, nem é uma instância. Ela é uma referência. No java, não existem variáveis com objetos dentro. São sempre setinhas para uma instância, uma referência para uma instância da classe.
Quando você faz Conta c
, declara que o tipo daquela variável é: uma referência para um objeto do tipo conta. Seja ela qual for
Se você faz ContaCorrente c
, essa referência será obrigatoriamente para alguma instância de ContaCorrente (ou filha dela).
Por que usar um ou usar outro? Esse demora um pouco mais para cair a ficha. Nos capítulos do Java III e Java Collections você verá exemplos práticos de como usar isso e tirar vantagens. É o mesmo que você ainda verá nos métodos que recebem metodo(Conta c)
.