parameterized a class for flexibility