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

Duvidas sobre a utilização do new

Gato gato = new gato();
Animal gato = new gato();

Sei que isso foi falado algumas vezes, mas não consegui entender claramente. Qual a necessidade de dar new Gato uma vez que estamos nos referindo a Animal? Porque não usar o new Animal?

3 respostas
solução!

Olá, Leandro.

Quando você transforma a classe em Abstrata, você NÃO consegue instanciar.

Ou seja, se a classe Animal estiver como abstrata, se você fizer:

Animal animal = new Animal();

Vai dar erro de compilação. Classes abstratas não podem ser instanciadas.

Como a classe Gato é um animal, ou seja, ela extends a classe Animal, você pode fazer o seguinte código que funciona:

Animal gato = new Gato();

Melhor?

Fala Leandro, tudo bem?

Vamos lá, a princípio vale dizer que precisamos dar um new em um objeto do tipo Gato(), logo o gato depois do new deve ser com maiúscula, da mesma forma que você declarou o objeto.

Gato garfield = new Gato();
//mudei o nome da variável para ficar mais claro, mas no lugar de garfield, podemos usar gato (com minúscula)

Observe que no exemplo assim, a variavel garfield é do tipo Gato, então quando instanciamos nela (usando o new), precisamos falar que será atribuida à ela um objeto do tipo Gato().

A questão de usar um animal é aproveitar o polimorfismo do Java. Gato é um Animal(), já que Gato() herda os atributos e métodos de Animal(), logo todo Gato() é um Animal().

Pensando dessa forma, a nossa variável bichinhoDeEstimacao que é do tipo Animal(), pode receber um objeto do tipo Gato().

Animal bichinhoDeEstimacao = new Gato();
//mudei o nome da variável de novo =)

mas e se o nosso bichinho de estimação fosse um cachorro? Nesse caso, precisamos apenas mudar o objeto passado. Como Cachorro() e Gato() extends Animal(), ou seja herdam da classe Aninmal(), podemos passar Cachorro():

Animal bichinhoDeEstimacao = new Cachorro()

faz sentido agora o porquê de podermos falar que Animal gato = new Gato()?

Espero ter ajudado =)

Obrigado Arthur e Samir. Sim, agora está claro! Afinal, para criar um "Animal" precisamos saber qual Animal queremos criar.