Son herramientas para situaciones distintas, enfócate en el concepto de "elementos que hacen lo mismo" versus "elementos que son lo mismo o están emparentados". Lo más genérico es usar interfaces, crear una clase que ofrece un servicio y de la mano su interfaz para quién quiera usar el servicio sepa qué tiene que cumplir para que todo funcione.
Así funciona generalmente Java, así deberíamos diseñar nosotros nuestros componentes.
PD: gracias!