it operates in the same method if possible, or in the same object or at least in the same package Logic and data are likely to have to change at the same time
are more like simple facts, whithout sequence or conditionals, it is easier to read code that is simply declarative It requires that you follow the thread of execution
jobs. They need to communicate what class they are like and thoy they are different. Prepend one or more modifiers to the superclass name to form a subclass name
one more thing to learn, understand, document, debug, organize, browse and name. Pay for interfaces only where you will need the flexibility they create. Maximizing the number of interfaces doesn't minimize the cost of software
change of the interface. An interface says: "Here's how to access this kind of funcionality" A superclass says: "Here's one way to implement this functionality"