And one day you may implement class Z2 that implements Interface2 but in a different way, you create decoupling (which is good) and give your code openess and easy maintenance which is also good. Your class Y will not have to change if you throw away the class Z and replace it with Z2.