switching abstract class constructors to protected