add class constructor factory pattern module level overrides (wow, what a mouthful)
make constructor override safer by forbidding it from returning types that aren't subtypes of the class being allocated