What is considered general best practice:
Reference via the super type?
public class BirdFeeder{
public Feed(Bird bird){...}
}
Or via a Interface
public class BirdFeeder{
public Feed(IBird iBird){...}
}
Personally I prefer interfaces but I’m not quite sure why, to me they just feel ‘cleaner’. I would like a better understanding of why I would choose one over another.
Thanks
You are correct about the interfaces, they offer you more flexibility in designing your inheritance hierarchy.
Suppose that you have a hierarchy that starts with a base class
Bird, and continues down to various species of birds. Now suppose that you would like to add a mechanical bird to the hierarchy of birds, but you would rather derive it from theRobotbase class. If your feeder takesBirdarguments, your mechanical bird would need a special feeder. If the feeder take anIBird, however, there would be no problem sending aRoboBirdto it, as long as it implements theIBirdinterface correctly.