adding abstract super class for template method pattern