Les exceptions dans Java impliquent la question de la classe parent-enfant, qui peut être résumé en une phrase: l'exception lancée par le constructeur d'une sous-classe doit contenir des exceptions de la classe parent. La méthode de la sous-classe peut choisir de lancer une exception de la classe de la classe parent "moins que ou égale à" ou non une exception.
1. Pourquoi le constructeur doit-il lancer une exception contenant la classe parent?
Il y a un passage dans "Thingking in Java":
Limitation de l'exception: lors de l'écrasement d'une méthode, seules les exceptions répertoriées dans la description de l'exception de la méthode de la classe de base peuvent être lancées.
Les restrictions d'exception ne fonctionnent pas pour le constructeur, vous constaterez que le constructeur de Stormyinning peut lancer des exceptions sans prêter attention aux exceptions lancées par le constructeur de la classe de base. Cependant, comme le constructeur doit être appelé d'une manière ou d'une autre, la description de l'exception du constructeur de sous-classe doit contenir la description de l'exception du constructeur de classe de base
Ce passage est un peu déroutant au début, mais vous comprendrez après l'avoir lu:
Tout d'abord, la description de l'exception est uniquement pour la méthode de remplacement, et le constructeur n'est évidemment pas dans cette plage, donc le constructeur de sous-classe peut lancer une exception sans prendre en compte l'exception lancée par le constructeur parent. Cependant, lorsque le nouveau objet de sous-classe, le constructeur de classe parent sera certainement appelé, de sorte que l'exception jetée par le constructeur de classe parent correspondant appelé par le constructeur de sous-classe doit être prise en compte. À l'heure actuelle, car "le constructeur de sous-classe ne peut pas attraper l'exception lancée par le constructeur de la classe parent (qui sera mentionné plus tard)", le constructeur de sous-classe doit lancer cette exception.
Classe SomeException étend l'exception {} classe TheotheRexception étend l'exception {} classe Basec {public basec () lève une certaine exception {} public basec (int a) lève Theotherexception {}} que la classe sous-casse étend une erreur {public subc () lance une certaine exception // si l'exception n'est pas lancée, une erreur sera signalée {super ();); // Super (37) doit être lancé; // Si vous remplacez Super () par cela, TheTherexception doit être lancé}}2. Pourquoi le constructeur de sous-classe ne peut-il pas attraper l'exception lancée par le constructeur de la classe parent?
Parce que si une sous-classe veut attraper l'exception lancée par la classe parent, elle doit afficher l'appel super (); ou super (xxx ...); Cependant, super () et this () ont une fonctionnalité, c'est qu'ils doivent être placés dans la première ligne, qui contredit essayer {} catch {}, il ne peut donc pas être capturé
3. Lorsque la classe parentale et l'interface héritées par la sous-classe ont le même nom de méthode, la méthode de traitement doit suivre la limite d'exception.
Class SomeException étend l'exception {} classe TheotheReXception étend l'exception {} interface interf {public void function () lève laxception; } class Basec {public void function () lance une certaine Exception {}} class Subc étend que Basec implémente interf {// Pour le moment, vous ne pouvez pas choisir de ne pas lancer l'exception publique void function () {} // une erreur: une exception de la fonction publique n'est pas compatible avec la clause de lancement dans interf.function () // public vide function () throws someException {};; // Erreur: exception TheotheRexception n'est pas compatible avec la clause de lancement dans basec.function () // public void function () lève theotherexception {}; }4. Pourquoi les sous-classes lancent-elles uniquement les exceptions répertoriées dans la description des exceptions de la méthode de la classe de base?
Étant donné que la sous-classe a la possibilité d'une conversion ascendante à la classe parent, si la sous-classe est autorisée à lancer des exceptions à volonté, alors lorsque la sous-classe est convertie en classe parent, l'interface de la méthode (appelons-le qui est le cas) deviendra le type de méthode de la classe parent. Pour le moment, le problème est que la sous-classe lancera des exceptions, mais la classe parent ne peut pas gérer l'exception. Par conséquent, afin de garantir le type remplaçable de l'objet, il est obligatoire que "seules les exceptions énumérées dans la description de l'exception de la méthode de la classe de base sont lancées".
Les "exceptions" mentionnées ici incluent également les sous-exceptions de ces exceptions!
5. Je ne sais pas si cela compte. Peut-être que je suis relativement stupide. J'y ai réfléchi longtemps avant de le comprendre. Écrivons-le pour le moment.
Classe SomeException étend une exception {} classe Basec {public void function () lève quelque " Manipulation des exceptions! / * public void function () lève une certaine exception {super.function (); } * / public void function () {try {super.function (); } catch (someException e) {e.printStackTrace (); }}}L'explication détaillée ci-dessus des exceptions impliquant des classes de père et d'enfants basées sur Java est tout le contenu que je partage avec vous. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.