Does an object have to be defined by a class?
A generic object type is used for dealing with unknown objects. However, when writing applications, you will create a class for each object the application requires; otherwise, the object would have no defined identity or characteristics and wouldn't be of much use.
Interfaces seem like extra, unnecessary code. Do I have to use them?
No, you don't have to use interfaces. But it is a good idea to use them in any portion of code that can be shared with other applications or where changes to the underlying code may occur regularly, and you want to make sure existing code isn't broken.