Last Updated on May 30, 2022 by RAJENDRAPRASAD
Runtime Polymorphism in java in Hindi – Hello दोस्तों rajhindime.in में आपका स्वागत है |
दोस्तों, पिछले पोस्ट Polymorphism in Java in Hindi में आपने Polymorphism क्या है , इनका Java में क्या महत्त्व है | इसे कैसे achieve करते हैं तथा इसके एक type, compile time polymorphism के बारे में विस्तार से जाना |
आज के इस पोस्ट Runtime Polymorphism in Java in Hindi में आप इसके दूसरे type Run time Polymorphism के बारे में विस्तार से जानेंगे |
Runtime Polymorphism:
इसे Dynamic Method Dispatch अथवा late binding भी कहते हैं |
इसमें किस method को call करना है, यह run time पर ही resolve होता है, इसलिए इसे run time polymorphism कहते हैं | इसे method overriding के द्वारा achieve किया जाता है |
Method Overriding:
Method override यह एक ऐसा procedure है जो, किसी child class को यह allow करता है कि वह किसी भी method जो कि, उसके parent class में पहले से ही defined हो, उसको change कर सकता है |
Inheritance के दौरान, यदि किसी child class और parent class दोनों में same method available हो तो, उस स्थिति में Child class का method, parent class के method को override कर देता है, इसे ही method overriding कहते हैं |
Method overriding में child class में स्थित method का name, parameter और return type बिल्कुल Parent class के method जैसे ही होता है |
इसमें method name तो same ही होता है परन्तु, वो child class में अलग perform/behave करता है और parent class में अलग |
इसमें जो overridden method होता है वह, super class के reference variable का use करके call किया जाता है, कौन सा method call होगा यह इस बात पर निर्भर (depend) करता है कि, वह reference variable, किस class के object को hold/refer करता है |
NOTE: जब parent class का reference variable उसके child class के object को hold/refer करता है, तब उसे Upcasting कहते हैं |
जैसे,
class Animal{}
class Dog extends Animal{}
Animal a = new Dog(); //upcasting
ऊपर के example में,
a यह parent class Animal का reference variable है जो, child class, Dog के object को refer करता है | इसे ही upcasting कहते हैं |
Program 1:
class Animal {
void breath() {
System.out.println("Breathing as Parent...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Child...");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a = new Dog();
a.breath();
}
}
OutPut:
Breathing as Child...
Program 1 में,
breath() method, parent class Animal में है, परन्तु same वही method, child class Dog में override किया गया है |
यहाँ हमने child class Dog के object को parent class के reference variable a में store किया है, जिससे जब भी हम breath() method को call करते हैं तब, वह child class के method को ही execute करता है |
Program 2:
class Animal {
void breath() {
System.out.println("Breathing as Parent...");
}
}
class Dog extends Animal {
void eat() {
System.out.println("eating as Child...");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a = new Dog();
a.breath();
}
}
OutPut:
Breathing as Parent...
Program 2 में,
जब हमने parent class के reference variable (जो child class object को store/ refer करता है) का use करते हुए breath() method को call किया तब, यहाँ parent class का ही method call हुआ |
क्योकि यहाँ child class के अंदर parent class के method breath() को override ही नहीं किया गया |
NOTE: जब भी हम parent class के reference variable (जो child class object को refer करता हो) के द्वारा किसी भी method को call करते हैं तब, वह केवल parent class के ही method को call करेगा (यदि parent class के method को child class में override न किया गया हो)
Program 3:
class Animal {
void breath() {
System.out.println("Breathing...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Dog...");
}
}
class Fish extends Animal {
void breath() {
System.out.println("Breathing as Fish...");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a;
a = new Dog();
a.breath();
a = new Fish();
a.breath();
}
}
OutPut:
Breathing as Dog...
Breathing as Fish...
Program 3 में,
यहाँ parent class के method breath() को दोनों ही child class Dog और Fish में override किया गया है |
a, Animal class का reference variable है, पहली बार a ने Dog class object को refer किया तब, a.breath() call करने पर Dog class का method breath() execute हुआ |
दूसरी बार a ने Fish class object को refer किया तब, a.breath() call करने पर Fish class का method breath() execute हुआ |
NOTE: जब भी हम parent class के reference variable (जो child class object को refer करता हो) के द्वारा किसी भी method को call करते हैं तब वह केवल child class के ही method को call करेगा (यदि parent class के method को child class में override किया गया हो)
सरल शब्दों में,
If (override in child class)
{
call from child class
}
else
{
call from immediate parent
}
Program 4:
class Animal {
void breath() {
System.out.println("Breathing...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Dog...");
}
}
class Fish extends Animal {
void breath() {
System.out.println("Breathing as Fish...");
}
void eat() {
System.out.println("eating");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a;
a = new Dog();
a.breath();
a = new Fish();
a.breath();
a.eat();
}
OutPut:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method eat() is undefined for the type Animal
at com.javapractice.methodOverrideDemo.main(methodOverrideDemo.java:29)
Program 4 में,
जब हमने parent class reference variable a (जो child class Fish को refer करता है) के द्वारा, child class method eat() को call किया तब compile time error मिला.
क्योकि eat() method केवल child class में ही defined है, parent class में नहीं |
NOTE: parent class के refernce variable द्वारा कभी भी child class के method को call नहीं किया जा सकता (जब तक same method parent class में available न हो अर्थात जब तक method override का concept apply न हुआ हो)
Program 5:
package com.javapractice;
class Animal {
void breath() {
System.out.println("Breathing...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Dog...");
}
}
class Fish extends Animal {
void breath() {
System.out.println("Breathing as Fish...");
}
void eat() {
System.out.println("eating as Fish...");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a;
a = new Dog();
a.breath();
a = new Fish();
a.breath();
//a.eat(); //compile time error
Fish f = new Fish();
f.eat();
}
}
OutPut:
Breathing as Dog...
Breathing as Fish...
eating as Fish...
Program 5 में,
हमने child class Fish के method eat() को call करने के लिए, Fish class का ही reference variable create किया जो, fish class object को refer करता है |
NOTE:Child class का वह method जो override न हुआ हो, उसे केवल child class के reference variable का use करके ही call किया जा सकता है |
Program 6:
class Bank {
int maximumInterestRate = 15;
}
class Sbi extends Bank {
int maximumInterestRate = 9;
}
public class MethodOverridingDemo {
public static void main(String[] args) {
Bank b = new Sbi();
System.out.println("Maximum Interest Rate : " + b.maximumInterestRate);
}
}
OutPut:
Maximum Interest Rate : 15
Program 6 में,
Parent तथा child class दोनों में ही variable maximumInterestRate defined है |
b यह parent class Bank का reference variable है जो, child class Sbi object को refer करता है |
यहाँ हमने b का use करके maximumInterestRate की value को print किया है, जिसकी value 15 ही आई, जो कि parent class से ही है, न कि child class से
NOTE: override का concept केवल method पर ही apply होता है न कि data member(variables) पर |
Method overriding और Multi level Inheritance:
Program 7:
class Animal {
void breath() {
System.out.println("Breathing as Animal...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Dog...");
}
}
class Puppy extends Dog {
void breath() {
System.out.println("Breathing as Puppy...");
}
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a;
a = new Dog();
a.breath();
a = new Puppy();
a.breath();
}
}
OutPut:
Breathing as Dog...
Breathing as Puppy...
Program 8:
class Animal {
void breath() {
System.out.println("Breathing as Animal...");
}
}
class Dog extends Animal {
void breath() {
System.out.println("Breathing as Dog...");
}
}
class Puppy extends Dog {
}
class methodOverrideDemo {
public static void main(String args[]) {
Animal a;
a = new Dog();
a.breath();
a = new Puppy();
a.breath();
}
}
OutPut:
Breathing as Dog...
Breathing as Dog...
Program 7 तथा 8 में,
Class Puppy, class Dog का child class है तथा class Dog, class Animal का child class है |
Program 7 में method breath() तीनों ही class में defined है, इसलिए output बिल्कुल normal आया |
जबकि, program 8 में breath() method, class Puppy में override नहीं हुआ है, इसलिए output अलग आया है |
NOTE: जब child class में method override न ho तब, method को call करने पर, वह उसके immediate parent class से call होता है |
Conclusion – आजआपने क्या सीखा
इस post में polymorphism के दूसरे type, run time polymorphism के बारे में विस्तार से जाना |
आशा है कि, आपको मेरा यह Blog Runtime Polymorphism in Java in hindi, जरूर पसंद आया होगा |
अगर आप इस post से related कोई सवाल पूँछना चाहते हैं अथवा कोई सुझाव देना चाहते हैं तो comment करके जरूर बताएं, मैं उसका reply जरूर दूँगा |
इस post को अपना कीमती समय देने के लिए बहुत बहुत धन्यवाद् | फिर मिलेंगें |
Sir Abstraction or Encapsulation topics ke uper bhi lecture bana digiye
Jarur Raj. Bahut hi jald banayenge. Dhanyawad