Posts Tagged ‘oop’

The Last Example Object Hierarchy You’ll Ever Need

Tuesday, September 9th, 2008

Explaining OO concepts to people is tricky when you’re using abstract names like class A extends B implements C.  So over the years I’ve come up with a system that I’m very happy with.  I share it with you here, dear reader.  It’s in Java, but it applies equally well to .NET languages.  C++ and other multiple inheritance developers need modify it only slightly to make Flier a mixin base class.

interface Flier {
    public void fly (int howFar);
}
abstract class Bird { }
abstract class FlyingBird extends Bird implements Flier { }
abstract class FlightlessBird extends Bird { }
abstract class Mammal { }
public class Robin extends FlyingBird {
    public void fly () { flapWings(); }
}
public class Penguin extends FlightlessBird { }
public class Squirrel extends Mammal { }
public class FlyingSquirrel extends Squirrel implements Flier {
    public void fly () { glide(); }
}

Celtic cross