Ошибки переопределения и перегрузки Java во время компиляции?

#java #oop #polymorphism #overloading #overriding

#java #ооп #полиморфизм #перегрузка #переопределение

Вопрос:

Я написал несколько примеров перегрузки метода и переопределения метода. Перегрузка метода — это статический полиморфизм, а переопределение — динамический полиморфизм.

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

Любые ошибки, связанные с переопределением метода (— в том случае, когда метод дочернего класса имеет то же имя, что и базовый класс, и те же аргументы, что и у базового класса —- ), будут выдаваться во время компиляции.

Существуют ли какие-либо сценарии в обоих вышеуказанных случаях, когда во время выполнения возникает исключение?

Ответ №1:

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

Нет, этого не должно быть, если ваш код из метода не выдает никаких исключений во время выполнения.

Любые ошибки, связанные с переопределением метода (— в том случае, когда метод дочернего класса имеет то же имя, что и базовый класс, и те же аргументы, что и у базового класса —- ), будут выдаваться во время компиляции.

Это то, что называется переопределением. если его там нет, то это может выдать ошибку во время компиляции, если вы используете @Override

Комментарии:

1. хорошо, если мой код в любом случае выдает исключение, которое не связано с перегрузкой .. kooll … Я принимаю .. Тем не менее, мой вопрос для переопределения заключается в том, есть ли у нас какая-либо вероятность исключения во время выполнения..

Ответ №2:

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

Некоторые сценарии, когда переопределение неправильного / неполного метода может вызвать исключения во время выполнения:

  1. Базовый метод является абстрактным, пока он не был реализован дочерним классом — это может произойти, когда родительский класс был перекомпилирован с добавлением нового метода, в то время как дочерний класс не был перекомпилирован (глючная отложенная компиляция или классы, расположенные в разных jar и т.д.)
  2. Переопределенный метод вызывается из конструктора базового класса.
  3. Связано с 1: базовый метод не является абстрактным, но сигнатура была изменена, в то время как дочерний класс не был перекомпилирован. Таким образом, это не вызвало ошибку компиляции и будет выполняться во время выполнения.

Комментарии:

1. @Tarlog ….. kool .. два сценария действительно имеют смысл .. Но проблемы такого рода при компиляции могут также вызывать те же проблемы с перегрузкой .. где я перегружаю дочерний класс. Теперь, когда я меняю базовый класс, скомпилируйте его, и я не скомпилирую дочерний класс — > что вы скажете?

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

3. Не могу ли я перегрузить метод базового класса в дочернем классе?

4. Ну, да, вы можете. Допустим, у вас есть Base.foo (строка) и Child.foo(int), поэтому Child.foo (int) перегружен. Но что тогда? Если вы измените Base.foo(String) на Base.foo(int), они станут переопределенными. Если вы измените что-то другое, они останутся переопределенными… Ну, может быть, можно подумать о каком-то случае, когда это вызовет ошибку во время выполнения… но я не могу представить это прямо сейчас.

5. Технически переопределение метода класса называется «скрытием», и его семантика отличается от переопределения метода экземпляра.