My Parent
class is :
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
I extend
this class to write a subclass Child
:
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
Notice while overriding the getX method in the Child
class , I have removed the throws
clause from the method definition .Now it results in an anomalous behavior by the compiler which is expected :
new Parent().getX() ;
does not compile without enclosing it in a try-catch
block , as expected .
new Child().getX() ;
compiles without enclosing it in a try-catch
block .
But the below lines of code needs the try-catch block .
Parent p = new Child();
p.getX();
As this could be foreseen i.e. using a parent class reference to invoke a child method during run-time polymorphism , why the designers of Java didn't make it mandatory to include the throws clause in the method definition while overriding a particular parent class method ? I mean if a parent class method has throws clause in its definition , then while overriding it the overriding method should also include the throws clause , Ain't it ?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…