replace abstract class with interface