What Adam makes a lot of sense, and it implies that self:: is poorly named. self:: doesn't mean "self", it means "a static instance of this very same class". I think you mean for a Meal/Lunch instance to chew() its own food, which is whacky.