почему мы не можем перегрузить метод на основе исключения throws также - PullRequest
3 голосов
/ 12 января 2010

почему мы не можем перегрузить метод с тем же типом возвращаемого значения, именем, аргументами, но с некоторым исключением throws? как показано

      public String getAppletInfo(){  }
      public String getAppletInfo() throws Exception{ }

Ответы [ 5 ]

12 голосов
/ 12 января 2010

Когда вы вызываете getAppletInfo() в коде, как вы хотите, чтобы JVM выбирала, какую перегрузку вызывать? В одном вызове метода нет семантической информации, позволяющей указать, какие исключения следует ожидать.

5 голосов
/ 12 января 2010

Согласно JLS (спецификация языка Java), выброшенное исключение не является частью сигнатуры метода. Следовательно, оба определения методов, которые вы предоставляете, не отличаются по своим сигнатурам и поэтому не являются допустимым кодом Java.

JLS Раздел 8.4.9 :
Если два метода класса (оба они объявлены в одном и том же классе или оба унаследованы классом или один объявлен и один унаследован) имеют одинаковое имя, но подписи не эквивалентны переопределению, то имя метода называется перегружен

И подпись метода определяется следующим образом: Раздел 8.4.2
Два метода имеют одинаковую подпись, если они имеют одинаковое имя и тип аргумента.

3 голосов
/ 12 января 2010

Если я позвоню myObject.getAppletInfo(), какой из них будет вызван?

0 голосов
/ 23 августа 2013

Прежде всего основы перегрузки функций заключаются в том, что сигнатура метода должна отличаться и включает в себя количество аргументов и тип аргументов (см. документы ). Таким образом, если в двух методах, если это просто часть исключения броска, которая отличается от этого, не считается перегрузка функции.

Перегруженный метод может генерировать любое исключение, выброшенное / не сгенерированное методом, который он перегружает, потому что оба являются независимыми вещами.

0 голосов
/ 12 января 2010

Любой метод может выдать RuntimeException, который является подклассом Exception. Таким образом, добавление throws Exception недостаточно для того, чтобы компилятор выбрал правильный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...