An overridding method is not allowed to throw more checked exceptions than those declared in the overridden method. Those not allowed include both new ones not declared and non-subclasses of the declared checked exceptions.
The reason is that if a code written originally for a Base class knows how to deal with the exceptions declared in the methods it calls; it could not forsee (manage) the new ones added by subclasses. This would break
polymorphism: an instance of a subclass is not suitable for wherever an instance of the superclass is ok --Substitution principle.
Thus b is also wrong, though Exception is not a supertype of AssertionError, but a checked exception.