abstract and intersace class