It has a lot to do with the OO principle of substitutability, more formally know as the Liskov Substitution Principle (LSP) which states that
Methods that use references to base classes must be able to use objects of derived classes without knowing it.. That is, if B is a subclass of A, then
you should be able to use a B in any method that uses an A without having to change your code. This way,
polymorphism can be used effectively and correctly. If the subclass B could throw an exception that the superclass A didn't, then any code that substituted an instance of B where an A is used would have to be modified to take care of the "extra baggage" that B brings to the table. This goes against the LSP.