I am writing a hunting-ground application in Java. I planned the hierarchy of classes as follows:Animal.javapublic interface Animal {    void age();    void reproduce();    boolean isAlive();    void die();}Carnivorus.javapublic abstract class Carnivorus implements Animal {    double age;    double expectancy;    boolean alive;    abstract void hunt();}Herbivore.javapublic abstract class Herbivore implements Animal{    double age;    double expectancy;    boolean alive;    abstract void graze();}Lion.javapublic 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;    }}I noticed that the variable definitions in Carnivore and Herbivore are repeated. But since Animal is a interface, I can't define variables there. In case I changed the Animal to a abstract class and defined the variables there, the Carnivore and Herbivore interfaces can't extends it. What would be the proper way to design it ? 
What would be the proper way to design the class hierarchy here?
java;class design