Введение в полиморфизм времени выполнения в Java

В этой статье мы узнаем о полиморфизме времени выполнения в Java. «Poly» означает «многие», а «morph» означает «тип». Таким образом, термин полиморфизм означает одно и то же для разных типов. Здесь мы увидим, как Java архивирует полиморфизм во время выполнения, что означает, после компиляции, но до запуска кода.

Синтаксис:

Для полиморфизма во время выполнения в Java вы должны следовать базовому синтаксису Java с аннотациями. @Override можно использовать аннотацию @Override чтобы указать, какой метод мы хотим переопределить.

Как работает Runtime Polymorphism в Java?

Полиморфизм времени выполнения работает в Java с помощью переопределения метода. Переопределение метода происходит, когда объекты имеют то же имя метода и аргументы и тип, что и у его родительского класса, но с другой функциональностью. Если в дочернем классе есть метод такого типа, мы называем его переопределенным методом.

Почему это называется Runtime Polymorphism?

когда мы вызываем переопределенный метод дочернего класса через ссылку на родительский тип (это явление в java называется «обновление»), тогда тип объекта указывает, какой метод или функциональность будет вызван. Принятие этого решения происходит во время выполнения JVM после компиляции кода. Следовательно это называется как полиморфизм времени выполнения.

Это также называется «Динамическая отправка метода». Причина названа так из-за того, что функциональность метода динамически определяется во время выполнения согласно объекту JVM

Это также называется «Позднее связывание», потому что связывание метода и объекта, что означает функциональность метода объекта, будет определено поздно, то есть после компиляции.

Правила и ограничения в рунтиме и полиморфизме

Ниже приведены некоторые правила и ограничения полиморфизма во время выполнения:

Правила выполнения полиморфизма

  • Методы дочернего и родительского класса должны иметь одинаковые имена.
  • Методы дочернего и родительского класса должны иметь один и тот же параметр.
  • Отношения IS-A являются обязательными (наследование).

Ограничения времени полиморфизма

  • Нельзя переопределить закрытые методы родительского класса.
  • Нельзя переопределить финальные методы.
  • Нельзя переопределить статические методы.

Примеры выполнения полиморфизма в Java

Мы обсудим некоторые примеры кода полиморфизма во время выполнения здесь.

Пример № 1

В этом примере мы покажем, как метод showcase () отображает различные сообщения в зависимости от того, с каким типом объекта он связан. Когда он связан с типом «Родители», он показывает сообщения из родительского класса. Принимая во внимание, что когда он связан с типом «Дети», он показывает сообщения от дочернего класса.

Код:

class Parents (
public void showcase () (
System.out.println("I am Parent");
)
)
class Children extends Parents (
@Override
public void showcase () (
System.out.println("I am Children");
)
)
public class RunTimePolymorphism (
public static void main(String args()) (
Parents superObject = new Parents();
superObject.showcase(); //method of super class or parent class is called
Parents subObject = new Children(); // upcasting
subObject.showcase();//method of sub class or child class is called by Parent reference, this is called "Run time Polymorphism"
Children subObject2 = new Children();
subObject2.showcase(); //method of sub class or child class is called
)
)

Выход:

Пример № 2

Давайте рассмотрим пример полиморфизма во время выполнения в случае многоуровневого наследования. В этом примере мы приняли во внимание два уровня наследования. В этом примере мы покажем, как метод sip () отображает различные сообщения в зависимости от того, с каким типом объекта он связан. Когда он связан с типом «Человек», он показывает сообщения из родительского класса. Принимая во внимание, что когда он связан с типом «Man», он показывает сообщения от своего дочернего класса. Опять же, на втором уровне наследования, когда он связан с типом «Baby», он показывает сообщения от своего дочернего класса своего родителя, который является классом «Man».

Код:

class Human(
void sip() (
System.out.println("Human is sipping");
)
)
class Man extends Human(
void sip()(
System.out.println("Man is sipping soup");
)
)
class Baby extends Man(
void sip()(
System.out.println("Baby is sipping milk");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
Human superObject=new Human();
Human subObject=new Man(); // // upcasting : first level of heritance
Human babyObject=new Baby(); // // upcasting : second level of heritance
superObject.sip();
subObject.sip(); //run time polymorphism happening in first level of heritance
babyObject.sip(); //run time polymorphism happening in second level of heritance
)
)

Выход:

Пример № 3

Давайте возьмем еще один пример полиморфизма времени выполнения в случае многоуровневого наследования. В этом примере мы имеем три уровня наследования, которые учитываются. В этом примере мы покажем, как метод feature () отображает различные функции в зависимости от типа объекта, с которым он связан. Когда он связан с типом «операционной системы», он показывает сообщения из родительского класса. Принимая во внимание, что, когда он связан с типом «DOS», он показывает сообщения от своего дочернего класса. Снова на втором уровне наследования, когда он связан с типом «Windows», он показывает сообщения от своего дочернего класса своего родителя, который является классом «DOS». Снова на третьем уровне наследования, когда он связан с типом «WindowsMobile», он показывает сообщения от своего дочернего класса своего родителя, который является классом «Windows».

Код:

class OperatingSytem(
void feature() (
System.out.println("This is Operating Sytem");
)
)
class DOS extends OperatingSytem(
void feature()(
System.out.println("This is DOS");
)
)
class Windows extends DOS(
void feature()(
System.out.println("This is Windows");
)
)
class WindowsMobile extends Windows(
void feature()(
System.out.println("This is Windows Mobile");
)
)
public class RunTimePolymorphism (
public static void main(String args())(
OperatingSytem superObject=new OperatingSytem();
OperatingSytem subObject=new DOS(); // child object type : first level of heritance
OperatingSytem sub2Object=new Windows(); // child object type : second level of heritance
OperatingSytem sub3Object=new WindowsMobile(); // child object type : third level of heritance
superObject.feature();
subObject.feature(); //run time polymorphism happening in first level of heritance
sub2Object.feature(); //run time polymorphism happening in second level of heritance
sub3Object.feature(); //run time polymorphism happening in third level of heritance
)
)

Выход:

Вывод

На этом мы заканчиваем изучение темы «Полиморфизм времени выполнения в Java». Напишите себе коды, упомянутые в приведенных выше примерах, в компиляторе java и проверьте вывод. Изучение кодов будет неполным, если вы не будете писать код самостоятельно.

Рекомендуемые статьи

Это было руководство по Полиморфизму времени выполнения в Java. Здесь мы обсуждаем, как работает полиморфизм времени выполнения в Java с примерами. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Статическое ключевое слово в Java
  2. Переопределение в Java
  3. Что такое полиморфизм?
  4. Руст против Голанга