use instancetype for every init method