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???
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???
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);
}
}
Ajudou sim, muito obrigado…