Interfaces manifest the object's responsibility. Functions accepting objects as parameters should work with interfaces, not type instances. That way the responsibilities and capabilities are clear to the user of the interface and the implementor.
As far as how the implementor may fulfill its interface obligation, it may use inheritance, if it truly has an IS-A or subtype relationship with the base object.