Vamos supor que a classe Animal tenha que implementar a interface Instinto
public interface Instinto{
public void sobreviver();
}
A classe Animal, sendo concreta e implementando a interface Instinto, precisa, obrigatoriamente, implementar cada um dos métodos existentes nesta interfac.
public class Animal implements Instinto{
@Override
public void sobreviver(){
//TODO implemente como cada animal sobrevive
System.out.println("É preciso definir qual animal, para saber como ele sobrevive");
}
//demais métodos inerentes a um animal
}
As subclasses poderão optar por sobrescrever ou não os métodos da superclasse, salvo se, esta for abstract e tiver métodos, próprios ou de uma interface que está sendo implementada por ela, que não foram implementados.
Neste caso, poderíamos apenas ter
public class Felino extends Animal{}
//e
public class Canino extends Animal{}
Assim como, pode-se fazer
public class Felino extends Animal{
@Override
public void sobreviver(){
setAlerta(true);
while(comFome){
comFome = cacar();
}
if(noCio){
Felino parceiroA = procurarParceiroA();
reproduzirSe(parceiroA);
}
}
}