"हाय, अमिगो! आजच्या धड्याचा विषय आहे रुंदीकरण आणि संकुचित प्रकार रूपांतरणे. तुम्ही आदिम प्रकार रुंद आणि संकुचित करण्याबद्दल खूप पूर्वी शिकलात. स्तर 10 वर. आज आपण संदर्भ प्रकारांसाठी ते कसे कार्य करते याबद्दल बोलणार आहोत, म्हणजे वर्गांची उदाहरणे."

खरं तर, हे सर्व अगदी सोपे आहे. वर्गाच्या वारसा साखळीची कल्पना करा: वर्ग, त्याचे पालक, पालकांचे पालक, इत्यादी, ऑब्जेक्ट वर्गाकडे परत. वर्गात वारशाने मिळालेल्या वर्गाच्या सर्व सदस्य पद्धतींचा समावेश असल्यामुळे , वर्गाचे उदाहरण व्हेरिएबलमध्ये जतन केले जाऊ शकते ज्याचा प्रकार त्याच्या पालकांपैकी कोणाचाही आहे.

येथे एक उदाहरण आहे:

कोड वर्णन
class Animal
{
public void doAnimalActions();
}class Cat extends Animal
{
public void doCatActions();
}class Tiger extends Cat
{
public void doTigerActions();
}
येथे आमच्याकडे तीन वर्ग घोषणा आहेत: प्राणी, मांजर आणि वाघ. मांजरीला प्राण्यांचा वारसा मिळतो. आणि वाघाला मांजराचा वारसा मिळाला.
public static void main(String[] args)
{
Tiger tiger = new Tiger();
Cat cat = new Tiger();
Animal animal = new Tiger();
Object obj = new Tiger();
}
टायगर ऑब्जेक्ट नेहमी व्हेरिएबलला नियुक्त केला जाऊ शकतो ज्याचा प्रकार त्याच्या पूर्वजांपैकी एक आहे. वाघ वर्गासाठी, हे मांजर, प्राणी आणि वस्तू आहेत.

आता रुंदीकरण आणि संकुचित रूपांतरणे पाहू.

एखाद्या असाइनमेंट ऑपरेशनमुळे आम्हाला इनहेरिटन्स चेन (ऑब्जेक्ट क्लासकडे) वर जाण्यास प्रवृत्त केले जात असेल, तर आम्ही रुंदीकरण (अपकास्टिंग म्हणूनही ओळखले जाणारे) रूपांतरण हाताळत आहोत. जर आपण साखळी खाली ऑब्जेक्टच्या प्रकाराकडे नेली, तर ते एक संकुचित रूपांतरण आहे (ज्याला डाउनकास्टिंग देखील म्हणतात).

वारसा साखळी वर जाण्याला रुंदीकरण म्हणतात, कारण ते अधिक सामान्य प्रकाराकडे नेले जाते. तथापि, असे करताना आम्ही वारशाद्वारे वर्गात जोडलेल्या पद्धतींचा वापर करण्याची क्षमता गमावतो.

कोड वर्णन
public static void main(String[] args)
{
Object obj = new Tiger();
Animal animal = (Animal) obj;
Cat cat = (Cat) obj;
Tiger tiger = (Tiger) animal;
Tiger tiger2 = (Tiger) cat;
}
प्रकार संकुचित करताना, तुम्हाला एक प्रकार रूपांतरण ऑपरेटर वापरण्याची आवश्यकता आहे, म्हणजे आम्ही एक स्पष्ट रूपांतरण करतो.

हे जावा मशीनला हे तपासण्यासाठी कारणीभूत ठरते की ऑब्जेक्ट खरोखरच आपल्याला ज्या प्रकारात रूपांतरित करायचे आहे त्याचा वारसा मिळतो.

या छोट्या नवकल्पनामुळे कास्टिंग त्रुटींच्या संख्येत अनेक पटींनी घट झाली आणि Java प्रोग्राम्सची स्थिरता लक्षणीयरीत्या वाढली.

कोड वर्णन
public static void main(String[] args)
{
Object obj = new Tiger();
if (obj instanceof Cat)
{
Cat cat = (Cat) obj;
cat.doCatActions();
}}
अजून चांगले,  चेकचे उदाहरण वापरा
public static void main(String[] args)
{
Animal animal = new Tiger();
doAllAction(animal);

Animal animal2 = new Cat();
doAllAction(animal2);

Animal animal3 = new Animal();
doAllAction(animal3);
}

public static void doAllAction(Animal animal)
{
if (animal instanceof Tiger)
{
Tiger tiger = (Tiger) animal;
tiger.doTigerActions();
}

if (animal instanceof Cat)
{
Cat cat = (Cat) animal;
cat.doCatActions();
}

animal.doAnimalActions();
}
आणि इथे का आहे. डावीकडील उदाहरण पहा.

आम्हाला (आमचा कोड) नेहमी माहित नसते की आम्ही कोणत्या प्रकारच्या ऑब्जेक्टसह काम करतो. हे व्हेरिएबल (प्राणी), किंवा कोणताही वंशज प्रकार (मांजर, वाघ) सारख्याच प्रकारची वस्तू असू शकते.

doAllAction पद्धतीचा विचार करा. पास केलेल्या ऑब्जेक्टच्या प्रकाराकडे दुर्लक्ष करून ते योग्यरित्या कार्य करते.

दुसऱ्या शब्दांत, ते सर्व तीन प्रकारांसाठी योग्यरित्या कार्य करते: प्राणी, मांजर आणि वाघ.

public static void main(String[] args)
{
Cat cat = new Tiger();
Animal animal = cat;
Object obj = cat;
}
येथे आमच्याकडे तीन असाइनमेंट ऑपरेशन्स आहेत. ती सर्व रुंदीकरणाची उदाहरणे आहेत.

येथे टाइप कास्ट ऑपरेटरची आवश्यकता नाही, कारण कोणतीही तपासणी आवश्यक नाही. ऑब्जेक्टचा संदर्भ नेहमी व्हेरिएबलमध्ये संग्रहित केला जाऊ शकतो ज्याचा प्रकार त्याच्या पूर्वजांपैकी एक आहे.

"अरे, दुसऱ्या ते शेवटच्या उदाहरणाने सर्वकाही स्पष्ट केले: चेक का आवश्यक आहे आणि कास्टिंग का आवश्यक आहे."

"मला तशी आशा आहे. मला या वस्तुस्थितीकडे तुमचे लक्ष वेधायचे आहे:"

यापैकी कशामुळेही वस्तू कोणत्याही प्रकारे बदलत नाही! बदलणारी एकमेव गोष्ट म्हणजे विशिष्ट संदर्भ चलवर कॉल करण्यासाठी उपलब्ध

उदाहरणार्थ, कॅट व्हेरिएबल तुम्हाला doAnimalActions आणि doCatActions पद्धती कॉल करू देते. त्याला doTigerActions पद्धतीबद्दल काहीही माहिती नाही, जरी ते टायगर ऑब्जेक्टकडे निर्देश करते.

"हो, मला समजले. मला वाटले होते त्यापेक्षा ते सोपे होते."