must use an empty constructor