Manejo de excepciones para anulaciones de métodos | Por Rajendra Rajaram | Enero de 2022
El uso de anulaciones para el manejo de excepciones es nuevo para mí, así que quería explorarlo. Profundicemos en las excepciones y luego analizaremos las excepciones cubiertas.
Si observamos el diagrama de flujo anterior, sabremos que cada lanzamiento se llama una excepción, y la excepción se divide principalmente en dos partes Compruebe la excepción y Excepción no verificada. Las excepciones marcadas son aquellas excepciones que son advertidas por Compliar y las excepciones no marcadas se pueden observar en tiempo de ejecución. Analicemos un ejemplo de excepciones comprobadas.
Cuando usted Mirando el diagrama anterior, notará que ClassNotFoundException, InterruptedException, IOException, etc. son tipos de excepciones verificadas, mientras que ArithmeticException, ClassCastException no están verificadas o, a veces, se denominan excepciones de tiempo de ejecución.
Ahora analicemos el manejo de excepciones para anular.
La ambigüedad surge cuando el manejo de excepciones implica la anulación de métodos. El compilador está confundido acerca de qué definición seguir.
tipo de pregunta:
Hay dos tipos de problemas asociados con él, como sigue:
Pregunta 1: si la superclase no declara una excepción
Pregunta 2: si la superclase declara una excepción
En este problema, ocurren las siguientes dos situaciones:
- Caso 1: Si SuperClass no declara ninguna excepción y la subclase declara excepciones marcadas
- Caso 2: Si SuperClass no declara ninguna excepción y SubClass declara una excepción no verificada
Analicemos los dos casos anteriores y expliquémoslos con el siguiente ejemplo:
Caso 1: Si la SuperClase no declara ninguna excepción y la subclase declara excepciones verificadas.
class Animal{public void method() {
System.out.println("I am in a Dog class");
}
}
class Dog extends Animal{
@Override
public void method() throws IOException {
super.method();
}
}
public class Test {
public static void main(String[] args) {
}
}
prueba.java:13:17
java: el método () en Perro no puede anular el método () en Animal
El método anulado no arroja java.io.IOException
Caso 2: Si SuperClass no declara ninguna excepción y SubClass declara una excepción no verificada
class Animal{public void method() {
System.out.println("I am in a Animal class");
}
}
class Dog extends Animal{
@Override
public void method() throws ArithmeticException {
super.method();
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.method();
}
}
prueba
estoy en la clase de animales
Ahora, el siguiente tema relacionado es si la superclase declara una excepción. En este problema, ocurrirán las siguientes 3 situaciones:
- Caso 1: Si SuperClass declara una excepción y SubClass declara una excepción que no sea la subexcepción de la Excepción declarada por SuperClass.
- Caso 2: Si SuperClass declara una excepción y SubClass declara una subexcepción de Exception declarada por SuperClass.
- Caso 3: Si SuperClass declara excepción y SubClass no declara excepción.
Expliquemos ahora estos casos a través de la implementación y la explicación.
Caso 1: Si SuperClass declara una excepción y SubClass declara una excepción que no sea la subexcepción de la Excepción declarada por SuperClass.
class Animal{public void method() throws RuntimeException{
System.out.println("I am in a Animal class");
}
}
class Dog extends Animal{
@Override
public void method() throws Exception {
super.method();
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.method();
}
}
prueba.java:13:17
java: el método () en Perro no puede anular el método () en Animal
El método anulado no arroja java.lang.Exception
Caso 2: Si SuperClass declara una excepción y SubClass declara una subexcepción de Exception declarada por SuperClass.
class Animal{public void method() throws IOException{
System.out.println("I am in a Animal class");
}
}
class Dog extends Animal{
@Override
public void method() throws ArithmeticException {
super.method();
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.method();
}
}
prueba.java:14:21
java: excepción no notificada java.io.IOException; debe detectarse o declararse para lanzarse
Caso 3: Si SuperClass declara excepción y SubClass no declara excepción.
class Animal{public void method() throws IOException{
System.out.println("I am in a Animal class");
}
}
class Dog extends Animal{
@Override
public void method() {
super.method();
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.method();
}
}
prueba.java:14:21
java: excepción no notificada java.io.IOException; debe detectarse o declararse para lanzarse
Espero que ganes algo, 😀