use only one constructor to keep consistent the implementations of the abstract classes and their invokes