Sto scrivendo un'applicazione "terreno di caccia" in Java. Ho pianificato la gerarchia delle classi come segue:
Animal.java
public interface Animal {
void age();
void reproduce();
boolean isAlive();
void die();
}
Carnivorus.java
public abstract class Carnivorus implements Animal {
double age;
double expectancy;
boolean alive;
abstract void hunt();
}
Herbivore.java
public abstract class Herbivore implements Animal{
double age;
double expectancy;
boolean alive;
abstract void graze();
}
Lion.java
public class Lion extends Carnivorus {
Lion(double currentAge,double livesFor){
age = currentAge;
expectancy = livesFor;
alive = true;
}
@Override
public void reproduce() {
// TODO Auto-generated method stub
}
@Override
public void hunt() {
// TODO Auto-generated method stub
}
@Override
public void age() {
// TODO Auto-generated method stub
age--;
}
@Override
public void die() {
// TODO Auto-generated method stub
alive = false;
}
public boolean isAlive(){
return alive;
}
}
Ho notato che le definizioni delle variabili in Carnivore e Herbivore sono ripetute. Ma dal momento che Animal è un'interfaccia, non posso definire variabili lì. Nel caso in cui abbia cambiato l'animale in una classe astratta e definito le variabili lì, le interfacce Carnivore e Herbivore non possono estenderlo. Quale sarebbe il modo corretto di progettarlo?