abstract class interface