The Interface Segregation Principle states the following: Clients of a class should not be forced to depend on those of its methods they don't use. Suppose you are building an animal simulator and you design an interface as shown below. In the beginning, you think that the application will accept only animals. So you design the IBehaviour interface to have three methods. eat(), sleep(), move(). Now let's assume that the application would not simulate animals, it would also simulate plants. The solution sounds quite simple, you just create the Plant class and implement the IBehaviour interface. But there is a problem a plant can't move and also can't sleep, so the methods sleep() and move() would end up having nothing inside as shown below. @Override public void move() { throw new UnsupportedOperationException("Not supported"); } @Override public void sleep() { throw new ...