abstract class revision