Formas de Instância em herança JAVA

7 respostas Resolvido
javaherança
I

Em discussão em sala de aula chegamos a duvida sobre herança em JAVA sobre a declaração de instância, sabemos que os duas formas funcionam mas qual é o correto, a diferença?

Classe Pai Animal (base)
Classe que herdam (filhas): Cachorro, Gato, Cavalo.

Formas de Instâncias declaradas:

Animal a = new Cachorro();
Cachorro a = new Cachorro();

7 Respostas

D
Solucao aceita

As duas formas são corretas, só que nas formas passadas existem diferenças:

1) Forma


Animal a = new Cachorro();

Nesse caso a variavel a (do tipo Animal) só vai conter os métodos da classe Animal.

2) Forma


Cachorro c = new Cachorro();

Nesse caso Cachorro que herda do de Animal, vai conter todos os métodos de Animal e também os métodos de Cachorro.


Exemplo:

package Example;
public class Animal {    
    private String nome;
    private String cor;
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }    
    public String getCor() {
        return cor;
    }
    public void setCor(String cor) {
        this.cor = cor;
    }    
}

package Example;
public class Cachorro extends Animal {
    private boolean peludo;
    public boolean isPeludo() {
        return peludo;
    }
    public void setPeludo(boolean peludo) {
        this.peludo = peludo;
    }    
}

Animal a = new Cachorro();

e

Cachorro c = new Cachorro();

Diferença é que a primeira instância animal não tem peludo, mesmo sendo instânciada da classe Cachorro, já na segunda à instância cachorro terá todos os métodos herdados da classe Animal.

Nesse link Conversão de Tipos ou Casting - Java, tem o complemento das Conversão e Casting especifico para Java e tem correlação a sua duvida.

I

E quando estou trabalhando com classe Abstrata como funciona esse tipo de instância?

D

Quando a classe é abstract, não pode ser instânciada, vai servir no caso como modelo e contrato para as que herdam, e nesse caso especifico se Animal fosse uma classe abstract e Cachorro herdasse seu comportamento, métodos, etc. você só poderia instânciar assim:

Se a classe Animal for abstract:

Correto:

Animal animal = new Cachorro();

e (essa sendo um caso lógico)

Cachorro animal = new Cachorro();

Erro:

Animal animal = new Animal(); // Erro porque Animal é `abstract`
                              // e não pode servir como instância.

Então muda o conceito nesse aspecto, tanto de: interfaces e classe abstract

I

Justamente minha duvida era saber se poderia instanciar dessa forma:

Animal animal  = new Cachorro();

além de:

Cachorro animal = new Cachorro();
I

Obrigado :wink:

D

è que você não colocou abstract!

I

Mas já tirou a duvida no casa de poder criar:

Animal cachorro = new Cachorro();
Criado 29 de julho de 2016
Ultima resposta 29 de jul. de 2016
Respostas 7
Participantes 2