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