add sample interface and abstract