Ir ao conteúdo
  • Cadastre-se
Nera

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

Recommended Posts

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?

 

 

 

 

Editado por Nera

Compartilhar este post


Link para o post
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.

Editado por psykotico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×