Articles on why should we use interface or abstract class rather than a concreate implementation . https://stackoverflow.com/questions/23058513/interface-method-referencing-a-concrete-class-as-parameter-causes-coupling https://stackoverflow.com/questions/3564264/why-return-a-collection-interface-rather-than-a-concrete-type