To do something useful, however, an implementation is needed, and this results in a class that has a name very similar to that of the interface. Personally, I do not like this explosion because of the significant increase in complexity that comes along with it. The second problem I see is future extensibility. Once an interface is distributed, there can never be a change in its definition. A change would immediately break all existing code.
Name scoping Another problem is the scoping of the method names in an interface definition.
You could take the precaution of using rather large and descriptive names, but this often makes the interfaces less readable. These methods control the state of the thread. Any interface that will use the method names start and stop can never be implemented by a subclass of the Thread class. The final problem is the lack of default implementation. When a class extends another class, this other class can provide default implementations for all the methods.