Аз кодирах няколко примера за претоварване на метода и за надмощие над метода. Претоварването на метода е статичният полиморфизъм и преобладаването е динамичен полиморфизъм.
Така че всяка грешка, свързана с претоварване, ще бъде уловена по време на компилацията .. Правилно?
Всички грешки, свързани с преодоляването на метода (- incase, когато методът на детския клас има същото име като базовия клас и същите аргументи като на базовия клас ----), ще бъдат изхвърлени при компилиране.
Има ли някакви сценарии в двата случая, в които има изключение по време на изпълнение?
Отговори:
1 за отговор № 1Не мога да си представя как претоварването на методите може да предизвика изключение по време на изпълнение.
Някои сценарии, когато неправилното / непълното заместване на метода може да предизвика изключения по време на изпълнение:
- Базовият метод е абстрактен, докато не е билреализиран от класа на детето - това може да се случи, когато родителският клас беше прекомпилиран, добавяйки нов метод, докато детето клас не беше прекомпилиран (бъги ленива компилация, или класове, разположени в различни jars, и т.н.)
- Overriden метод се извиква от конструктора на базовия клас.
- Свързани с 1: основният метод не е абстрактен, но подписът е променен, докато детето не е прекомпилирано. Така че не е причинил грешка при компилирането и ще лети по време на изпълнение.
2 за отговор № 2
Така че всяка грешка, свързана с претоварване ще бъдат уловени в компилацията или… има ли такива сценарии, когато е изключение по време на изпълнение хвърлен поради неправилно претоварване - Съмнявам се
Не, не трябва, ако вашият код от метода не хвърля никакво изключение по време на изпълнение.
Всички грешки, свързани с метода първостепенен (- в случай на детето Методът на класа има същото име като Base клас и същите аргументи като на база клас ----) ще бъде хвърлен при компилиране време.
Това е т.нар. ако не е там, тогава може да хвърли грешка при компилиране, ако използвате @Override