You often have a skeletal implementations for an interface I
. If you can offer extensibility without abstract methods (e.g. via hooks), it is preferable to have a non-abstract skeletal class because you can instantiate it.
An example would be a forwarding wrapper classes, to be able to forward to another object of a concrete class C
implementing I
, e.g. enabling decoration or simple code-reuse of C
without having to inherit from C
. You can find such an example in Effective Java item 16, favor composition over inheritance. (I do not want to post it here because of copyrights, but it is really simply forwarding all method calls of I
to the wrapped implementation).