Use an abstract class to provide some concrete implementation but not allow instantiation. You can always instantiate an ordinary class which doesn't make sense if it can't stand alone. At the same time, an interface might not be enough if there's a concrete implementation that's identical in all implementing classes. An abstract class is just enough.
- Interface: contract only, no implementation, no instantiation
- Abstract class: contract, some implementation, no instantiation
- Class: contract, implementation, instantiation
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…