differentiation between abstract and concrete classes on all levels.