Исключения в Java включают проблему класса родителей-ребенка, который может быть обобщен в одно предложение: исключение, брошенное конструктором подкласса, должно содержать исключения родительского класса. Метод подкласса может выбрать, чтобы бросить исключение из родительского класса «прицел меньше или равен» или не выбрасывать исключение.
1. Почему конструктор должен бросить исключение, содержащее родительский класс?
Есть отрывок в «Чайкинг на Яве»:
Ограничение исключений: при перезаписи метода можно бросить только те исключения, перечисленные в описании исключения метода базового класса.
Ограничения исключений не работают для конструктора, вы обнаружите, что конструктор Stormyinning может сделать любые исключения, не обращая внимания на исключения, брошенные конструктором базового класса. Однако, поскольку конструктор должен быть так или иначе назвать, описание исключения конструктора подкласса должно содержать описание исключения конструктора базового класса
Этот отрывок сначала немного сбивает с толку, но после прочтения вы поймете:
Прежде всего, описание исключения предназначено только для метода переопределения, и конструктор, очевидно, не в пределах этого диапазона, поэтому конструктор подкласса может добавить любое исключение, не принимая во внимание исключение, добавленное родительским конструктором. Однако, когда новый объект подкласса, создатель родительского класса, обязательно будет вызван, поэтому необходимо учитывать исключение, добавленное соответствующим конструктором родительского класса, вызванным конструктором подкласса. В настоящее время, поскольку «конструктор подкласса не может поймать исключение, брошенное конструктором родительского класса (который будет упомянут позже)», конструктор подкласса должен бросить это исключение.
Class SomeException Excement Exception {} класс Theotherexception Excement Exception {} класс Basec {public basec () Throws Comeexception {} public basec (int a) TheOtherexception {}} Class Subc Extends Basec {public subc () выбрасывает //, если исключение не будет выдвинуто, ошибка будет сообщается {super (); // Супер (37) должен быть брошен; // Если вы замените Super () на это, Theotherexception должно быть брошено}}2. Почему конструктор подкласса не может поймать исключение, брошенное конструктором родительского класса?
Потому что, если подкласс хочет поймать исключение, брошенное родительским классом, он должен отображать вызов Super (); или супер (xxx ...); Тем не менее, Super () и This () имеет функцию, которая должна быть помещена в первую строку, которая противоречит попытке {} поймать {}, так что это не может быть захвачено
3. Когда родительский класс и интерфейс, унаследованные подклассом, имеют одинаковое имя метода, метод обработки должен следовать ограничению исключения.
Класс SomeException Excement Exception {} класс TheOtherException Excement Exception {} интерфейс interf {public void function () theotherexception; } класс BASEC {public void function () Throws SomeException {}} Class Subc Extens Basec реализует Interf {// В настоящее время вы можете только выбрать исключение public void function () {} // Ошибка: Исключение какое -то не совместимо с положением throhs in reterf.function () // public function () throws некоторое количество throwsexception {}; // Ошибка: Исключение TheOtherexception не совместимо с предложением о бросках в basec.function () // public void function () Throws Theotherexception {}; }4. Почему подклассы бросают только те исключения, перечисленные в описании исключения метода базового класса?
Поскольку подкласс имеет возможность преобразования вверх в родительский класс, если подклассу разрешено бросать исключения по желанию, то, когда подкласс преобразуется в родительский класс, интерфейс метода (давайте назовем его, это так) станет типом метода родительского класса. В настоящее время проблема заключается в том, что подкласс будет бросить исключения, но родительский класс не может справиться с исключением. Следовательно, чтобы обеспечить смену поддающегося типа объекта, обязательно, что «брошены только те исключения, перечисленные в описании исключения метода базового класса».
Упомянутые здесь «исключения» также включают эти исключения этих исключений!
5. Я не знаю, имеет ли это значение. Может быть, я относительно глуп. Я думал об этом долгое время, прежде чем понял это. Давайте на данный момент.
Класс SomeException Exceptends Exception {} класс Basec {public void function () ThrowseException {} // Если исключение, которое здесь представляет собой подкласс исключения времени выполнения, это не может быть обработано исключение} Подска умение обращаться! /* public void function () бросает некоторую Exception {super.function (); } */ public void function () {try {super.function (); } catch (someException e) {e.printstackTrace (); }}}Приведенное выше подробное объяснение исключений с участием классов отца и детей, основанных на Java, является всем контентом, которым я делюсь с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.