abstract a class that can be used