Ir ao conteúdo
  • Cadastre-se

Por que os atributos e métodos superiores são os que permanecem em uma herança


Nera

Posts recomendados

Tenho uma dúvida sobre a sintaxe

       

       Animal c = new Cachorro()    

 

Eu esperava que os métodos e atributos

que permaneceriam visíveis seriam os da

classe cachorro, mas não é, o animal

sobrepõe.

 

package modificadorFinal;

public class Animal {
	   public String nome  = "animal";

	   public void fazerBarulho(){
		   System.out.println("Animal barulho");
	   }
}

//-----------------------------------------------------

package modificadorFinal;

public class Cachorro extends Animal{
	   public String nome  = "cachorro";

	   public void fazerBarulho(){
		   System.out.println("Cachorro barulho");
	   }	   
}


//-------------------------------------------------------

package modificadorFinal;

public class Teste {
	public static void main(String[] args){
     Animal c = new Cachorro();
     System.out.println(c.nome);
	}
}

 

O resultado para este código é:   animal

 

 

Alguém pode  me explicar porque isso ocorre?

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Primeiramente porque você está setando estaticamente o valor do atributo, por isso, mesmo que você tenha instanciado um objeto diferente, o valor do atributo não será alterado pois foi setado no momento do acesso à classe ... além disso, você está sobrescrevendo um atributo, o que não é nada recomendado ... a melhor forma de executar esse código para funcionar como você deseja seria assim:

public class Test {

	public static void main(String[] args) {
		Animal c = new Cachorro();
		System.out.println(c.nome);
	}

}

class Animal {
	public String nome;

	public Animal() {
		nome = "animal";
	}

	public void fazerBarulho() {
		System.out.println("Animal barulho");
	}
}

class Cachorro extends Animal {
	
	public Cachorro() {
		nome = "cachorro";
	}
	
	public void fazerBarulho() {
		System.out.println("Cachorro barulho");
	}
}

Perceba que, nome é um atributo da classe Animal, mas é herdado pela classe Cachorro, podendo ser alterado como um atributo próprio. Assim, não preciso utilizar a sobrescrita, nem setar de forma estática o valor.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...