I've have an animal class
class Animal
{
public function eat(Food $food);
}
the subclass who inherit it actually cannot support all kinds of Food (Cat can only eat meat):
class Cat extends Animal
{
public function eat(Food $food)
{
if (!$food instanceof Meat) throw new InvalidArgumentException();
}
}
of course, Meat
is a subclass of Food
So is this code violate LSP (I think it does)? and how to re-design it?