explain the constructor