हाय! आज आपण OOP च्या तत्त्वांवरील धड्यांची मालिका संपवत आहोत. या धड्यात, आपण जावा पॉलिमॉर्फिझमबद्दल बोलू. पॉलिमॉर्फिझम म्हणजे अनेक प्रकारांसह कार्य करण्याची क्षमता जसे की ते समान प्रकारचे आहेत. शिवाय, वस्तूंचे वर्तन त्यांच्या प्रकारानुसार भिन्न असेल. चला या विधानावर बारकाईने नजर टाकूया. चला पहिल्या भागापासून सुरुवात करूया: 'अनेक प्रकारांसह कार्य करण्याची क्षमता जसे की ते समान प्रकारचे आहेत'. वेगवेगळे प्रकार एकसारखे कसे असू शकतात? हे थोडे विचित्र वाटते :/ बहुरूपता कशी वापरावी - १खरं तर, हे सर्व खूप सोपे आहे. उदाहरणार्थ, वारसाच्या सामान्य वापरादरम्यान ही परिस्थिती उद्भवते. ते कसे कार्य करते ते पाहूया. समजा आपल्याकडे एकच रन() पद्धतीसह एक साधा मांजर पालक वर्ग आहे :
public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
आता आम्ही तीन वर्ग तयार करू ज्यांना मांजर वारसा मिळतो : सिंह , वाघ आणि चित्ता .
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
तर आमचे ३ वर्ग आहेत. चला त्या परिस्थितीचे मॉडेल करूया जिथे आपण त्यांच्यासोबत काम करू शकतो जसे की ते समान वर्ग आहेत. कल्पना करा की आमची एक मांजर आजारी आहे आणि तिला डॉ. डॉलिटलची मदत हवी आहे. सिंह, वाघ आणि चित्ता यांना बरे करणारा डॉलिटल वर्ग तयार करण्याचा प्रयत्न करूया .
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
असे दिसते की समस्या सुटली आहे: वर्ग लिहिला आहे आणि जाण्यासाठी तयार आहे. पण आम्हाला आमचा कार्यक्रम वाढवायचा असेल तर आम्ही काय करणार? आपल्याकडे सध्या फक्त 3 प्रकार आहेत: सिंह, वाघ आणि चित्ता. परंतु जगात 40 हून अधिक प्रकारच्या मांजरी आहेत. कल्पना करा की आपण मॅन्युल्स, जग्वार, मेन कून्स, घरातील मांजरी आणि बाकी सर्वांसाठी वेगळे वर्ग जोडले तर काय होईल. पॉलिमॉर्फिझम कसे वापरावे - 2प्रोग्राम स्वतःच नक्कीच कार्य करेल, परंतु प्रत्येक प्रकारच्या मांजरीला बरे करण्यासाठी आम्हाला डॉलिटल क्लासमध्ये सतत नवीन पद्धती जोडल्या पाहिजेत. परिणामी, ते अभूतपूर्व आकारात वाढेल. इथूनच बहुरूपता - "अनेक प्रकारांसोबत कार्य करण्याची क्षमता जसे की ते एकाच प्रकारचे आहेत" - येते. एकच गोष्ट करण्यासाठी आम्हाला असंख्य पद्धती तयार करण्याची गरज नाही - मांजरीला बरे करा. त्या सर्वांसाठी एक पद्धत पुरेशी आहे:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
healCat () पद्धत सिंह , वाघ आणि चित्ता वस्तू स्वीकारू शकते — ती सर्व मांजरीची उदाहरणे आहेत :
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
कन्सोल आउटपुट: रुग्ण निरोगी आहे! रुग्ण निरोगी आहे! रुग्ण निरोगी आहे! तर आमचे डॉलीटलवर्ग वेगवेगळ्या प्रकारांसह कार्य करतो जणू ते समान प्रकारचे आहेत. आता दुसरा भाग हाताळूया: "शिवाय, वस्तूंचे वर्तन त्यांच्या प्रकारानुसार भिन्न असेल". हे सर्व खूप सोपे आहे. निसर्गात, प्रत्येक मांजर वेगळ्या पद्धतीने धावते. कमीतकमी, ते वेगवेगळ्या वेगाने धावतात. आमच्या तीन मांजरांमध्ये, चित्ता सर्वात वेगवान आहे, तर वाघ आणि सिंह हळू धावतात. दुसऱ्या शब्दांत, त्यांचे वर्तन वेगळे आहे. पॉलीमॉर्फिझम आपण भिन्न प्रकार एक म्हणून वापरू या यापेक्षा बरेच काही करतो. हे आम्हाला त्यांच्यातील फरक लक्षात ठेवू देते, त्यांच्यापैकी प्रत्येकासाठी विशिष्ट वर्तन जतन करते. पुढील उदाहरण हे स्पष्ट करते. समजा की आमच्या मांजरींनी, यशस्वी पुनर्प्राप्तीनंतर, थोडे धावण्याचा आनंद घेण्याचे ठरविले. आम्ही हे आमच्या Dolittle वर्गात जोडू :
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
तीन प्राण्यांवर उपचार करण्यासाठी समान कोड चालवण्याचा प्रयत्न करूया:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
आणि परिणाम कसे दिसतात ते येथे आहे: रुग्ण निरोगी आहे! सिंह 80 किमी/तास वेगाने धावतो. रुग्ण निरोगी आहे! वाघ 60 किमी/तास वेगाने धावतो. रुग्ण निरोगी आहे! चित्ता 120 किमी/तास वेगाने धावतो येथे आपण स्पष्टपणे पाहतो की वस्तूंचे विशिष्ट वर्तन जतन केले जाते, जरी आपण तिन्ही प्राण्यांना मांजरीकडे 'सामान्यीकरण' केल्यानंतर या पद्धतीकडे पाठवले . बहुरूपतेमुळे, जावाला चांगले आठवते की या फक्त तीन मांजरी नाहीत. ते सिंह, वाघ आणि चित्ता आहेत, जे प्रत्येक वेगळ्या पद्धतीने धावतात. हे पॉलिमॉर्फिझमचा मुख्य फायदा स्पष्ट करते: लवचिकता. जेव्हा आपल्याला अनेक प्रकारांद्वारे सामायिक केलेली काही कार्यक्षमता लागू करण्याची आवश्यकता असते, तेव्हा सिंह, वाघ आणि चित्ता फक्त 'मांजर' बनतात. सर्व प्राणी भिन्न आहेत, परंतु काही परिस्थितींमध्ये मांजर ही मांजर असते, त्याची प्रजाती काहीही असो :) येथे आपल्यासाठी काही व्हिडिओ पुष्टीकरण आहे.
जेव्हा हे 'सामान्यीकरण' अवांछित असते आणि त्याऐवजी आपल्याला प्रत्येक प्रजातीने वेगळ्या पद्धतीने वागण्याची आवश्यकता असते, तेव्हा प्रत्येक प्रकार स्वतःचे कार्य करतो. पॉलिमॉर्फिझमबद्दल धन्यवाद, आपण वर्गांच्या विस्तृत श्रेणीसाठी एकल इंटरफेस (पद्धतींचा संच) तयार करू शकता. हे प्रोग्राम कमी क्लिष्ट बनवते. जरी आम्ही 40 प्रकारच्या मांजरींना समर्थन देण्यासाठी प्रोग्रामचा विस्तार केला तरीही आमच्याकडे सर्वात सोपा इंटरफेस असेल: सर्व 40 मांजरींसाठी एकच रन() पद्धत.