Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Instância de Classes

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.

4 respostas

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/

solução!

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).