Java полиморфизъм

Полиморфизъм е възможността да се противопостави да вземат най-различни форми. Най-честата употреба на полиморфизъм в обектно-ориентиран случва, когато позоваването родителския клас се използва за обозначаване на клас обект на детето.

Всеки Java обект, който може да премине повече от един тест е IS-полиморфна. В Java всички Java обекти са полиморфни, тъй като всеки обект ще се проведе и тестът за своя тип, а за клас Object.

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

Нека разгледаме един пример.

Сега, еленът се счита полиморфен клас, тъй като има множество наследство. По-долу са вярно за горния пример:

Всички позовавания на променливата г, А, V, за да се отнасят до един и същ обект на купчината елени.

Виртуални методи:

В този раздел ще ви покажа как поведението на подтиснатия методи в Java ви позволява да се възползвате от полиморфизъм в развитието на своите класове.

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

Да предположим сега, че ние се разширява класа на служителите, както следва:

Сега изучаваме следната програма внимателно и се опитайте да се идентифицират сключването му:

Това ще доведе до следния резултат:

Тук ние създаваме два обекта заплата. един използвайки стандартна заплата S, а другият от помощен персонал Е.

Докато vyzovas.mailCheck () компилатор вижда променливата не е () в класа на заплатите по време на компилация, както и на виртуалната машина е променливата не е () в класа на изпълнение на заплатите.

Обадете се променливата не е (), за да д е доста по-различно, тъй като д е връзката на работника или служителя. Когато vidite.mailCheck компилатор (), компилаторът вижда метод променливата не () в класа на служител.

Тук, по време на компилация, компилаторът използва променливата не е () в служителя да провери това твърдение. По време на изпълнение, обаче, JVM е променливата не е () в заплатата на класа.