logo

Polimorfizmas Java

Polimorfizmas Java yra koncepcija, pagal kurią galime atlikti a vieną veiksmą įvairiais būdais . Polimorfizmas yra kilęs iš 2 graikų kalbos žodžių: poli ir morfai. Žodis „poli“ reiškia daug, o „morfai“ reiškia formas. Taigi polimorfizmas reiškia daugybę formų.

„Java“ yra dviejų tipų polimorfizmas: kompiliavimo laiko polimorfizmas ir vykdymo laiko polimorfizmas. Galime atlikti Java polimorfizmą perkrovę ir nepaisydami metodo.

Jei perkraunate statinį Java metodą, tai yra kompiliavimo laiko polimorfizmo pavyzdys. Čia mes sutelksime dėmesį į vykdymo laiko polimorfizmą Java.


Vykdymo laiko polimorfizmas Java

Vykdymo laiko polimorfizmas arba Dinaminis metodo išsiuntimas yra procesas, kurio metu nepaisyto metodo iškvietimas išsprendžiamas vykdymo, o ne kompiliavimo metu.

Šiame procese nepaisytas metodas iškviečiamas per superklasės atskaitos kintamąjį. Iškviečiamo metodo nustatymas yra pagrįstas objektu, kurį nurodo referencinis kintamasis.

Pirmiausia supraskime pakeitimą prieš vykdymo laiko polimorfizmą.

Naujinimas

Jei pagrindinės klasės nuorodos kintamasis nurodo antrinės klasės objektą, jis vadinamas aukštyn pakeitimu. Pavyzdžiui:

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

Norėdami atnaujinti, galime naudoti klasės tipo arba sąsajos tipo referencinį kintamąjį. Pavyzdžiui:

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

Čia B klasės santykis būtų toks:

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

Kadangi objektas yra visų Java klasių šakninė klasė, galime parašyti B IS-A Object.


Java Runtime Polimorphism pavyzdys

Šiame pavyzdyje mes kuriame dvi klases „Dviratis“ ir „Splendor“. Splendor klasė išplečia Bike klasę ir nepaiso jos run() metodo. Vykdymo metodą vadiname Parent klasės referenciniu kintamuoju. Kadangi jis nurodo poklasio objektą, o poklasio metodas nepaiso pagrindinės klasės metodo, poklasio metodas iškviečiamas vykdymo metu.

Kadangi metodo iškvietimą nustato JVM, o ne kompiliatorius, jis žinomas kaip vykdymo laiko polimorfizmas.

 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(); } } 
Išbandykite dabar

Išvestis:

 running safely with 60km. 

„Java“ vykdymo laiko polimorfizmo pavyzdys: bankas

Apsvarstykite scenarijų, kai bankas yra klasė, kuri suteikia metodą palūkanų normai gauti. Tačiau palūkanų norma gali skirtis priklausomai nuo bankų. Pavyzdžiui, SBI, ICICI ir AXIS bankai taiko 8,4%, 7,3% ir 9,7% palūkanų normas.

„Java Runtime Polymorphism“ banko pavyzdys

Pastaba: šis pavyzdys taip pat pateiktas metodo nepaisymui, bet nebuvo perkėlimo.

 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()); } } 
Išbandykite dabar

Išvestis:

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

Java vykdymo laiko polimorfizmo pavyzdys: 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(); } } 
Išbandykite dabar

Išvestis:

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

„Java“ vykdymo laiko polimorfizmo pavyzdys: gyvūnas

 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(); }} 
Išbandykite dabar

Išvestis:

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

Java vykdymo laiko polimorfizmas su duomenų nariu

Nepaisomas metodas, o ne duomenų nariai, todėl duomenų nariai negali pasiekti vykdymo laiko polimorfizmo.

java lygu metodas

Toliau pateiktame pavyzdyje abi klasės turi duomenų nario greičio apribojimą. Duomenų narį pasiekiame naudodami pagrindinės klasės pamatinį kintamąjį, kuris nurodo poklasio objektą. Kadangi pasiekiame duomenų narį, kuris nėra nepaisomas, todėl jis visada pasieks pagrindinės klasės duomenų narį.

Taisyklė: duomenų nariai negali pasiekti vykdymo laiko polimorfizmo.

 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 } } 
Išbandykite dabar

Išvestis:

 90 

„Java“ vykdymo laiko polimorfizmas su daugiapakopiu paveldėjimu

Pažiūrėkime paprastą vykdymo laiko polimorfizmo pavyzdį su daugiapakopiu paveldėjimu.

 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(); } } 
Išbandykite dabar

Išvestis:

 eating eating fruits drinking Milk 

Išbandykite išvestį

 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(); }} 
Išbandykite dabar

Išvestis:

 Dog is eating 

Kadangi BabyDog nepaiso eat() metodo, todėl iškviečiamas Dog klasės eat() metodas.