Description:
private abstract static class C1 { public abstract void m1() throws Exception; public abstract void m2() throws IOException; public abstract void m3() throws Exception; } private static class C2 extends C1 { @Override public void m1() throws IOException {} @Override public void m2() throws Exception {} @Override public void m3() {} }
Solution:
Overrides of m1()
and m3()
are valid. In the case of m1()
, the override in C2 defines an Exception
which is a sub-class of the one declared on the parent. This is defining a more precise exception than the parent, and it's completely legal. In the second case, m2()
throws a more general exception, and this is an illegal override.