Las excepciones en Java implican el tema de la clase Parent-Child, que se puede resumir en una oración: la excepción lanzada por el constructor de una subclase debe contener excepciones de la clase principal. El método de la subclase puede optar por lanzar una excepción del alcance de la clase principal "menos o igual a" o no lanzar una excepción.
1. ¿Por qué el constructor tiene que lanzar una excepción que contenga la clase principal?
Hay un pasaje en "Thingking in Java":
Limitación de excepciones: al sobrescribir un método, solo se pueden lanzar esas excepciones enumeradas en la descripción de excepción del método de clase base.
Las restricciones de excepción no funcionan para el constructor, encontrará que el constructor de Stormyinning puede arrojar ninguna excepción sin prestar atención a las excepciones lanzadas por el constructor de la clase base. Sin embargo, debido a que el constructor debe llamarse de una forma u otra, la descripción de la excepción del constructor de subclase debe contener la descripción de la excepción del constructor de clase base
Este pasaje es un poco confuso al principio, pero lo entenderá después de leerlo:
En primer lugar, la descripción de la excepción es solo para el método de anulación, y el constructor obviamente no está dentro de este rango, por lo que el constructor de subclase puede lanzar cualquier excepción sin tener en cuenta la excepción lanzada por el constructor principal. Sin embargo, cuando sea nuevo un objeto de subclase, definitivamente se llamará al constructor de la clase principal, por lo que debe tenerse en cuenta la excepción lanzada por el constructor de clase principal correspondiente llamado por el constructor de subclase. En este momento, debido a que "el constructor de subclase no puede detectar la excepción lanzada por el constructor de la clase principal (que se mencionará más adelante)", el constructor de subclase debe lanzar esta excepción.
La clase SomeException extiende la excepción {} class TheothereRexception extiende la excepción {} class BASEC {public Basec () lanza SomeException {} public basec (int a) lanza TheotherException {}} class Subc extiende BASEC {public Subc () lanza SomeException // Si la excepción no se muestra, un error se informará {Super (); // Super (37) debe ser arrojado; // Si reemplaza Super () con esto, TheothereRexception debe ser lanzado}}2. ¿Por qué el constructor de subclase no puede atrapar la excepción lanzada por el constructor de la clase principal?
Porque si una subclase quiere ver la excepción lanzada por la clase principal, debe mostrar la llamada super (); o super (xxx ...); Sin embargo, super () y este () tienen una característica, que es que deben colocarse en la primera línea, lo que contradice try {} capt {}, por lo que no se puede capturar
3. Cuando la clase y la interfaz principal heredada por la subclase tienen el mismo nombre del método, el método de procesamiento debe seguir el límite de excepción.
La clase SomeException extiende la excepción {} class TheothereRexception extiende la excepción {} interfaz interf {public void function () lanza TheOtherException; } class BASEC {public void function () lanza SomeException {}} Class Subc extiende BASEC Implements Interf {// En este momento solo puede elegir no lanzar una función de excepción Void Function () {} // Un error: la excepción de SomeException no es compatible con la cláusula de lanzamiento en interf.función () // public void Function () Some Exception {{{{}; // Error: la excepción theothereRexception no es compatible con la cláusula de lanzamiento en basec.function () // public void function () lanza TheOtherException {}; }4. ¿Por qué las subclases solo arrojan esas excepciones enumeradas en la descripción de la excepción del método de clase base?
Debido a que la subclase tiene la posibilidad de una conversión ascendente a la clase principal, si se permite que la subclase arroje excepciones a voluntad, entonces cuando la subclase se convierte a la clase principal, la interfaz del método (llamémoslo, ese es el caso) se convertirá en el tipo de método de la clase principal. En este momento, el problema es que la subclase arrojará excepciones, pero la clase principal no puede manejar la excepción. Por lo tanto, para garantizar el tipo reemplazable del objeto, es obligatorio que "solo esas excepciones enumeradas en la descripción de excepción del método de clase base se arrojen".
¡Las "excepciones" mencionadas aquí también incluyen las subexcepciones de estas excepciones!
5. No sé si esto cuenta. Tal vez soy relativamente estúpido. Lo pensé durante mucho tiempo antes de entenderlo. Vamos a escribirlo por ahora.
La clase SomeException extiende la excepción {} class BASEC {public void function () lanza SomeException {} // Si la excepción lanzada aquí es una subclase de excepción de tiempo de ejecución, no se puede manejar la excepción} de la clase Subc extiende BASEC {<br> // El súper. de manejo de excepciones! /* public void function () lanza SomeException {super.function (); } */ public void function () {try {super.function (); } catch (SomeException e) {E.PrintStackTrace (); }}}La explicación detallada anterior de las excepciones que involucran clases de padre e hijos basados en Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.