implement a virtual class