/ / Java Преодоляване и претоварване хвърлят грешки по време на компилация? - java, oop, полиморфизъм, претоварване, отмяна

Java Заместване и претоварване хвърля грешки при компилиране време? - java, oop, polymorphism, претоварване, override

Аз кодирах няколко примера за претоварване на метода и за надмощие над метода. Претоварването на метода е статичният полиморфизъм и преобладаването е динамичен полиморфизъм.

Така че всяка грешка, свързана с претоварване, ще бъде уловена по време на компилацията .. Правилно?

Всички грешки, свързани с преодоляването на метода (- incase, когато методът на детския клас има същото име като базовия клас и същите аргументи като на базовия клас ----), ще бъдат изхвърлени при компилиране.

Има ли някакви сценарии в двата случая, в които има изключение по време на изпълнение?

Отговори:

1 за отговор № 1

Не мога да си представя как претоварването на методите може да предизвика изключение по време на изпълнение.

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

  1. Базовият метод е абстрактен, докато не е билреализиран от класа на детето - това може да се случи, когато родителският клас беше прекомпилиран, добавяйки нов метод, докато детето клас не беше прекомпилиран (бъги ленива компилация, или класове, разположени в различни jars, и т.н.)
  2. Overriden метод се извиква от конструктора на базовия клас.
  3. Свързани с 1: основният метод не е абстрактен, но подписът е променен, докато детето не е прекомпилирано. Така че не е причинил грешка при компилирането и ще лети по време на изпълнение.

2 за отговор № 2

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

Не, не трябва, ако вашият код от метода не хвърля никакво изключение по време на изпълнение.

Всички грешки, свързани с метода първостепенен (- в случай на детето Методът на класа има същото име като Base клас и същите аргументи като на база клас ----) ще бъде хвърлен при компилиране време.

Това е т.нар. ако не е там, тогава може да хвърли грешка при компилиране, ако използвате @Override