Herança - Alguem tem algum exemplo?

2 respostas
jefersonrcosta

Nao estou conseguindo entender muito bem o conceito de herança, ate a parte do extends eu entendi, mais nao sei como executar os metodos que estao dentro da superclasse…

Alguem pode me ajudar???

2 Respostas

M

Sim, temos um exemplo. Espero que te ajude. Veja:

Classe Animal

/**
 * Classe base da hierarquia. Um <code>extends Object</code> é implícito.
 */
public abstract class Animal {

	protected double peso;

	/**
	 * Construtor da classe. Todas as subclasses precisarão declarar uma chamada
	 * explícita desse construtor (usando <code>super(double)</code>).
	 * 
	 * @param peso
	 *            o peso do animal em quilogramas
	 */
	public Animal(double peso) {
		this.peso = peso;
		// imprime para sabermos o que foi executado
		System.out.println("Construtor de Animal");
	}

	/**
	 * 
	 * @return o peso do animal
	 */
	public double getPeso() {
		return peso;
	}

	/**
	 * Mostra a frase para identificação das chamadas de método.
	 */
	@Override
	public String toString() {
		return "Sou um animal";
	}

	/**
	 * As subclasses não-abstratas devem implementar este método com o som
	 * específico do animal.
	 */
	public abstract void fazerBarulho();

}

Classe Mamifero

/**
 * Classe que todos os mamíferos devem extender.
 */
public abstract class Mamifero extends Animal {

	/**
	 * Construtor que deve existir devido ao construtor declarado na
	 * superclasse.
	 * 
	 * @param peso
	 *            o peso do mamífero em quilogramas
	 */
	public Mamifero(double peso) {
		// repare na chamada do construtor da super classe através da
		// palavra-chave 'super'
		super(peso);
		// imprime para sabermos o que foi executado
		System.out.println("Construtor de Mamífero");
	}

	/**
	 * Novo método que todo mamífero deve ter. Ou seja, além dos métodos
	 * definidos em <code>Object</code> e em <code>Animal</code>, os
	 * <code>Mamíferos</code> podem chamar este método.
	 */
	public void beberLeite() {
		System.out.println("Opa! Leite!!");
	}

	/**
	 * Sobreescreve o <code>toString()</code> para que além de mostrar a saída
	 * da superclasse (<code>super.toString()</code> faz isso), mostre também
	 * que é um <code>Mamífero</code>.
	 */
	@Override
	public String toString() {
		return super.toString() + "\nSou um mamífero";
	}

}

Classe Cachorro

/**
 * Classe que modela um cachorro.
 */
public class Cachorro extends Mamifero {

	/**
	 * Construtor explícito que deve existir.
	 */
	public Cachorro(double peso) {
		// chamada do construtor da classe pai
		super(peso);
		// imprime para sabermos o que foi executado
		System.out.println("Construtor de Cachorro");
	}

	/**
	 * Implementação do método <code>fazerBarulho()</code>, definido em
	 * <code>Animal</code>.
	 */
	@Override
	public void fazerBarulho() {
		// late!
		System.out.println("Au au au au!");
	}

	/**
	 * Mostra o mesmo que as subclasses, mas a informação que é um cachorro e
	 * mais o peso.
	 */
	@Override
	public String toString() {
		// repare que chamamos o método getPeso() que não foi definido nesta
		// classe, mas foi herdado de Animal
		return super.toString() + "\nSou um cachorro e tenho " + getPeso()
				+ " Kg";
	}

}

Classe TesteHeranca

public class TesteHeranca {

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

}
jefersonrcosta

Ajudou sim, muito obrigado…

Criado 29 de dezembro de 2009
Ultima resposta 29 de dez. de 2009
Respostas 2
Participantes 2