That makes sense
For common exception hierarchies
If InterfaceC is allowed to throw IOException then a statement like InterfaceB ref = new SubClassThatThrowsIOExAndImplementsC(); will get into trouble since the Exception scope does not allow this. IOException is wider than FileNotFoundException and the InterfaceB contract only allows you to throw FileNotFoundException
So InterfaceC can only throw FileNotFoundException
For the scenario
InterfaceC is in trouble. For case
So InterfaceC cannot throw anything, since the contract provided by InterfaceA or InterfaceB can be broken
Does that make sense ?