Mi clase Parent
es:herencia, firma del método, el método de primer orden y cláusula throws
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
esta clase para escribir una subclase Child
:
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
Aviso mientras anulando la getX método en la clase Child
, he eliminado la cláusula throws
de la definición del método. Ahora da como resultado un comportamiento anómalo por el compilador que se espera:
new Parent().getX() ;
no compila sin formar parte de un bloque try-catch
, como se esperaba.
new Child().getX() ;
compila sin formar parte de un bloque try-catch
.
Pero las siguientes líneas de código necesitan el bloque try-catch.
Parent p = new Child();
p.getX();
Como esto se podía prever es decir, utilizando una referencia de la clase padre para invocar un método hijo durante el polimorfismo en tiempo de ejecución, por qué los diseñadores de Java no hacen obligatoria la inclusión de la cláusula throws en el método de definición, mientras anulando un método particular de clase padre? Quiero decir, si un método de clase padre tiene la cláusula throws en su definición, entonces, al anularlo, el método de anulación también debería incluir la cláusula throws, ¿no es así?
En su última frase, hizo que quiere decir "a continuación, mientras se sobreescriben que la *** *** primordial método (el método en la subclase) también debe incluir la cláusula throws" ??? – Bhushan