logo

Polymorfismi Javassa

Polymorfismi Javassa on käsite, jolla voimme suorittaa a yksittäistä toimintaa eri tavoilla . Polymorfismi on johdettu kahdesta kreikan sanasta: poly ja morphs. Sana 'poly' tarkoittaa monia ja 'morfit' muotoja. Joten polymorfismi tarkoittaa monia muotoja.

Javassa on kahta tyyppiä polymorfismia: käännösajan polymorfismi ja ajonaikainen polymorfismi. Voimme suorittaa polymorfismin javassa menetelmän ylikuormituksen ja menetelmän ohituksen avulla.

cobol-ohjelmointi

Jos ylikuormitat staattista menetelmää Javassa, se on esimerkki käännösajan polymorfismista. Tässä keskitymme javan ajonaikaiseen polymorfismiin.


Ajonaikainen polymorfismi Javassa

Ajonaikainen polymorfismi tai Dynaaminen menetelmän lähetys on prosessi, jossa kutsu ohitetulle menetelmälle ratkaistaan ​​ajon aikana käännösajan sijaan.

Tässä prosessissa ohitettu menetelmä kutsutaan superluokan referenssimuuttujan kautta. Kutsuttavan menetelmän määritys perustuu siihen, mihin olioon viitemuuttuja viittaa.

Ymmärretään ensin upcasting ennen ajonaikaista polymorfismia.

Upcasting

Jos Parent-luokan viitemuuttuja viittaa Child-luokan objektiin, sitä kutsutaan upcastingiksi. Esimerkiksi:

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

Upcastingissa voimme käyttää luokkatyypin tai liitäntätyypin viitemuuttujaa. Esimerkiksi:

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

Tässä B-luokan suhde olisi:

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

Koska Object on kaikkien Java-luokkien juuriluokka, voimme kirjoittaa B IS-A Object.


Esimerkki Java Runtime Polymorphismista

Tässä esimerkissä luomme kaksi luokkaa Bike ja Splendor. Splendor-luokka laajentaa Bike-luokkaa ja ohittaa sen run()-metodin. Kutsumme run-menetelmää Parent-luokan viitemuuttujalla. Koska se viittaa aliluokkaobjektiin ja aliluokkamenetelmä ohittaa Parent-luokan menetelmän, aliluokkamenetelmä kutsutaan ajon aikana.

Koska menetelmän kutsun määrittää JVM, ei kääntäjä, se tunnetaan ajonaikaisena polymorfismina.

 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(); } } 
Testaa nyt

Lähtö:

 running safely with 60km. 

Java Runtime Polymorphism Esimerkki: Pankki

Harkitse skenaariota, jossa Pankki on luokka, joka tarjoaa menetelmän koron saamiseksi. Korkotaso voi kuitenkin vaihdella pankeittain. Esimerkiksi SBI-, ICICI- ja AXIS-pankit tarjoavat 8,4 %, 7,3 % ja 9,7 % korkoa.

Java Runtime Polymorphism -esimerkki pankista

Huomautus: Tämä esimerkki on annettu myös menetelmän ohituksessa, mutta upcastia ei ollut.

 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()); } } 
Testaa nyt

Lähtö:

 SBI Rate of Interest: 8.4 ICICI Rate of Interest: 7.3 AXIS Rate of Interest: 9.7 

Java Runtime Polymorphism Esimerkki: muoto

 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(); } } 
Testaa nyt

Lähtö:

python-konstruktori
 drawing rectangle... drawing circle... drawing triangle... 

Java Runtime Polymorphism Esimerkki: Animal

 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(); }} 
Testaa nyt

Lähtö:

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

Java Runtime Polymorphism with Data Member

Menetelmä ohitetaan, ei datajäseniä, joten datajäsenet eivät voi saavuttaa ajonaikaista polymorfismia.

Alla olevassa esimerkissä molemmilla luokilla on datajäsenen nopeusrajoitus. Pääsemme tietojäseneen Parent-luokan viitemuuttujalla, joka viittaa alaluokkaobjektiin. Koska käytämme datajäsentä, jota ei ole ohitettu, se käyttää aina Parent-luokan datajäsentä.

Sääntö: Datajäsenet eivät voi saavuttaa ajonaikaista polymorfismia.

 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 } } 
Testaa nyt

Lähtö:

 90 

Java Runtime Polymorphism with Multilevel Heritance

Katsotaanpa yksinkertaista esimerkkiä ajonaikaisesta polymorfismista, jossa on monitasoinen perintö.

 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(); } } 
Testaa nyt

Lähtö:

 eating eating fruits drinking Milk 

Kokeile Outputia

 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(); }} 
Testaa nyt

Lähtö:

 Dog is eating 

Koska BabyDog ei ohita eat()-menetelmää, niin Dog-luokan eat()-metodia vedetään.