interface abstract class