learning abstract class