Object Oriented Design Interview

oop

Solution

Well, here's one good one that I came up with - utilizing OOP overriding, subclass and superclass:

namespace Animals{

    // base class Animal
    class Animal{

     public void eat(Food f){

     }

    }


    class Carnivore extends Animal{

      public void eat(Meat f){

      }

    }

    class Herbivore extends Animal{

      public void eat(Plant f){

      }

    }

    class Omnivore extends Animal{

      public void eat(Food f){

      }
    }

}

namespace Food{

    // base class Food
    class Food{

    }

    class Meat extends Food{

    }

    class Plant extends Food{

    }

}

I create subclasses Herbivore, Carnivore and Omnivore from the superclass Animal and override the `eat` method with the type of food that it can actually eat.

So:

Plant grass = new Plant();
Herbivore deer = new Herbivore();
deer.eat(grass); // ok

Plant grass2 = new Plant();
Carnivore tiger = new Carnivore();
tiger.eat(grass2); // not ok.

Meat deer2 = new Meat();
tiger.eat(deer2); // ok

Well, the final problem is that, when you specify that `deer` is a `Herbivore`, you can't make it a `Meat` for `tiger` to eat. However at the end of the day, this should be sufficient for solving the interview problem whilst not putting the interviewer to sleep.

Problem

Any advice on solving this problem?

Original source