fix public method should be protected
let implementations handle instantiation exceptions