В этом посте вы поймете,
- Что такое полиморфизм во время выполнения?
- Что такое полиморфизм во время компиляции?
- Что происходит во время компиляции и во время выполнения?
Полиморфизм во время выполнения
Вы можете посмотреть на следующие классы.
//Parent class class Parent { public void eat(){ System.out.println("Parent - eat()"); } } //Child class class Child extends Parent { @Override public void eat() { System.out.println("Child - eat()"); } } public class OOPDemo { public static void main(String args[]){ Parent obj = new Child(); obj.eat(); } }
В этом примере я создал родительский класс, дочерний класс и основной класс. Затем я создал Дочерний объект по родительской ссылке . Теперь давайте проверим, что происходит во время компиляции и во время выполнения.
Время компиляции
- Во время компиляции он заботится о родительской ссылке.
- Потому что объекты создаются во время выполнения.
- Во-первых, он проверяет, есть ли какой-либо метод eat() в родительском классе.
- В этом примере родительский класс имеет метод eat().
- Таким образом, это не дает никаких исключений во время компиляции, и компиляция будет успешной.
Время выполнения
- Во время выполнения он обрабатывает дочернюю ссылку и создает новый дочерний объект.
- Затем он проверяет, есть ли какой-либо метод eat() в дочернем классе.
- В ребенке также есть метод eat().
- Затем этот метод будет вызван во время выполнения.
- Это означает, что создание объекта происходит во время выполнения JVM, и среда выполнения отвечает за вызов метода eat(), который нужно вызвать.
- Вот почему это называется полиморфизмом во время выполнения ( Динамический полиморфизм )
Полиморфизм во время компиляции
class Animal{ public void eat(){ System.out.println("Eat method"); } public void eat(int quantity){ System.out.println("Eat method with quantity"); } } public class ReferenceDemo { public static void main(String args[]){ Animal animal = new Animal(); animal.eat(); } }
В этом случае один класс имеет одни и те же методы с двумя разными параметрами. Как вы знаете, это называется перегрузка метода .
Время компиляции
- Во время компиляции он проверяет метод animal.eat() в классе Animal.
- В классе animal нет метода target().
- В соответствии со списком параметров он вызовет, какой метод следует вызвать.
- Тогда компиляция в порядке.
Время выполнения
- Во время выполнения он создает объект того же типа животного.
- Затем он проверяет то же самое, что и во время компиляции.
- Это означает, что времени компиляции достаточно, чтобы проверить, какой метод следует вызывать.
- Вот почему это называется полиморфизмом времени компиляции ( Статический полиморфизм ).
Заключительные слова!
Полиморфизм по времени переопределения – временной полиморфизм
Дополнительная информация: www.javafoundation.xyz
Оригинал: “https://dev.to/raviyasas/compile-time-polymorphism-vs-run-time-polymorphism-fin”