logo

Polimorfisms Java valodā

Polimorfisms Java valodā ir jēdziens, ar kuru mēs varam veikt a viena darbība dažādos veidos . Polimorfisms ir atvasināts no 2 grieķu vārdiem: poli un morfi. Vārds “poli” nozīmē daudz, un “morfi” nozīmē formas. Tātad polimorfisms nozīmē daudzas formas.

lapsa vai vilks

Java ir divu veidu polimorfisms: kompilēšanas laika polimorfisms un izpildlaika polimorfisms. Mēs varam veikt polimorfismu Java, izmantojot metodes pārslodzi un metodes ignorēšanu.

Ja Java pārslogojat statisku metodi, tas ir kompilēšanas laika polimorfisma piemērs. Šeit mēs koncentrēsimies uz java izpildlaika polimorfismu.


Izpildes laika polimorfisms Java

Runtime polimorfisms vai Dinamiskās metodes nosūtīšana ir process, kurā ignorētas metodes izsaukums tiek atrisināts izpildlaikā, nevis kompilēšanas laikā.

Šajā procesā tiek izsaukta ignorēta metode, izmantojot virsklases atsauces mainīgo. Izsaucamās metodes noteikšana balstās uz objektu, uz kuru atsaucas atsauces mainīgais.

Vispirms sapratīsim apraidi pirms izpildlaika polimorfisma.

Upcasting

Ja Parent klases atsauces mainīgais attiecas uz Child klases objektu, to sauc par augšuplādēšanu. Piemēram:

Upcasting Java
 class A{} class B extends A{} 
 A a=new B();//upcasting 

Apraidīšanai mēs varam izmantot klases tipa vai interfeisa tipa atsauces mainīgo. Piemēram:

 interface I{} class A{} class B extends A implements I{} 

Šeit B klases attiecības būtu šādas:

 B IS-A A B IS-A I B IS-A Object 

Tā kā objekts ir visu Java klašu saknes klase, mēs varam rakstīt B IS-A objektu.


Java izpildlaika polimorfisma piemērs

Šajā piemērā mēs veidojam divas klases Velosipēds un Splendor. Splendor klase paplašina Bike klasi un ignorē tās run() metodi. Mēs izsaucam palaišanas metodi ar vecāku klases atsauces mainīgo. Tā kā tā attiecas uz apakšklases objektu un apakšklases metode ignorē vecāku klases metodi, apakšklases metode tiek izsaukta izpildlaikā.

Tā kā metodes izsaukšanu nosaka JVM, nevis kompilators, to sauc par izpildlaika polimorfismu.

 class Bike{ void run(){System.out.println('running');} } class Splendor extends Bike{ void run(){System.out.println('running safely with 60km');} public static void main(String args[]){ Bike b = new Splendor();//upcasting b.run(); } } 
Izmēģiniet to tūlīt

Izvade:

 running safely with 60km. 

Java izpildlaika polimorfisma piemērs: banka

Apsveriet scenāriju, kurā Banka ir klase, kas nodrošina metodi procentu likmes iegūšanai. Tomēr procentu likme var atšķirties atkarībā no bankas. Piemēram, SBI, ICICI un AXIS bankas nodrošina 8,4%, 7,3% un 9,7% procentu likmi.

Java izpildlaika polimorfisma bankas piemērs

Piezīme. Šis piemērs ir norādīts arī metodes ignorēšanā, taču netika veikta augšuplāde.

 class Bank{ float getRateOfInterest(){return 0;} } class SBI extends Bank{ float getRateOfInterest(){return 8.4f;} } class ICICI extends Bank{ float getRateOfInterest(){return 7.3f;} } class AXIS extends Bank{ float getRateOfInterest(){return 9.7f;} } class TestPolymorphism{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('SBI Rate of Interest: '+b.getRateOfInterest()); b=new ICICI(); System.out.println('ICICI Rate of Interest: '+b.getRateOfInterest()); b=new AXIS(); System.out.println('AXIS Rate of Interest: '+b.getRateOfInterest()); } } 
Izmēģiniet to tūlīt

Izvade:

xor valodā c++
 SBI Rate of Interest: 8.4 ICICI Rate of Interest: 7.3 AXIS Rate of Interest: 9.7 

Java izpildlaika polimorfisma piemērs: forma

 class Shape{ void draw(){System.out.println('drawing...');} } class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle...');} } class Circle extends Shape{ void draw(){System.out.println('drawing circle...');} } class Triangle extends Shape{ void draw(){System.out.println('drawing triangle...');} } class TestPolymorphism2{ public static void main(String args[]){ Shape s; s=new Rectangle(); s.draw(); s=new Circle(); s.draw(); s=new Triangle(); s.draw(); } } 
Izmēģiniet to tūlīt

Izvade:

 drawing rectangle... drawing circle... drawing triangle... 

Java izpildlaika polimorfisma piemērs: dzīvnieks

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} } class Cat extends Animal{ void eat(){System.out.println('eating rat...');} } class Lion extends Animal{ void eat(){System.out.println('eating meat...');} } class TestPolymorphism3{ public static void main(String[] args){ Animal a; a=new Dog(); a.eat(); a=new Cat(); a.eat(); a=new Lion(); a.eat(); }} 
Izmēģiniet to tūlīt

Izvade:

 eating bread... eating rat... eating meat... 

Java izpildlaika polimorfisms ar datu locekli

Tiek ignorēta metode, nevis datu dalībnieki, tāpēc datu dalībnieki nevar panākt izpildlaika polimorfismu.

Tālāk sniegtajā piemērā abām klasēm ir datu dalībnieka ātruma ierobežojums. Mēs piekļūstam datu dalībniekam, izmantojot vecāku klases atsauces mainīgo, kas attiecas uz apakšklases objektu. Tā kā mēs piekļūstam datu dalībniekam, kas nav ignorēts, tas vienmēr piekļūs vecāku klases datu dalībniekam.

Noteikums: datu dalībnieki nevar sasniegt izpildlaika polimorfismu.

 class Bike{ int speedlimit=90; } class Honda3 extends Bike{ int speedlimit=150; public static void main(String args[]){ Bike obj=new Honda3(); System.out.println(obj.speedlimit);//90 } } 
Izmēģiniet to tūlīt

Izvade:

 90 

Java izpildlaika polimorfisms ar daudzlīmeņu mantojumu

Apskatīsim vienkāršu izpildlaika polimorfisma piemēru ar daudzlīmeņu pārmantošanu.

 class Animal{ void eat(){System.out.println('eating');} } class Dog extends Animal{ void eat(){System.out.println('eating fruits');} } class BabyDog extends Dog{ void eat(){System.out.println('drinking milk');} public static void main(String args[]){ Animal a1,a2,a3; a1=new Animal(); a2=new Dog(); a3=new BabyDog(); a1.eat(); a2.eat(); a3.eat(); } } 
Izmēģiniet to tūlīt

Izvade:

 eating eating fruits drinking Milk 

Izmēģiniet izvadi

 class Animal{ void eat(){System.out.println('animal is eating...');} } class Dog extends Animal{ void eat(){System.out.println('dog is eating...');} } class BabyDog1 extends Dog{ public static void main(String args[]){ Animal a=new BabyDog1(); a.eat(); }} 
Izmēģiniet to tūlīt

Izvade:

 Dog is eating 

Tā kā BabyDog nepārspēj ēst() metodi, tiek izsaukta Dog klases eat() metode.