privatized polymorphism, restricted access and template method.