Because when the interface changes, an abstract class can add default implementations (even if the implementations only throw unimplemented operation exceptions).
That means that code that has used the abstract class won't have to break. If you change an interface, the implementing code inevitably breaks. 2011/7/13 Sébastien Brisard <sebastien.bris...@m4x.org> > We would then have had an empty abstract class. So why not an interface?