हाय! आज आम्ही ऑपरेटरच्या उदाहरणाबद्दल बोलू , ते कसे वापरले जाते याची उदाहरणे विचारात घेऊ आणि ते कसे कार्य करते याच्या काही पैलूंवर स्पर्श करू:) तुम्ही या ऑपरेटरला CodeGym च्या सुरुवातीच्या स्तरांवर आधीच भेटले आहे. आम्हाला याची गरज का आहे हे तुम्हाला आठवते का? नसल्यास, काळजी नाही. चला एकत्र लक्षात ठेवूया. X व्हेरिएबलद्वारे संदर्भित ऑब्जेक्ट काही Y वर्गाच्या आधारे तयार केले गेले आहे की नाही हे तपासण्यासाठी ऑपरेटरची उदाहरणे आवश्यक आहेत . ते साधे वाटते. आम्ही या विषयाकडे परत का आलो? सर्व प्रथम, कारण आता तुम्ही Java च्या वारसा पद्धती आणि OOP च्या इतर तत्त्वांशी परिचित आहात. ऑपरेटरचे उदाहरण आता अधिक स्पष्ट होईल आणि आम्ही ते कसे वापरले जाते याची अधिक प्रगत उदाहरणे पाहू. चल जाऊया!तुम्हाला कदाचित आठवत असेल की चेकचे मूल्यमापन खरे असल्यास ऑपरेटरचे उदाहरण खरे , किंवा अभिव्यक्ती खोटी असल्यास खोटे. त्यानुसार, हे सहसा सर्व प्रकारच्या सशर्त अभिव्यक्तींमध्ये आढळते ( if…else ). चला काही सोप्या उदाहरणांसह प्रारंभ करूया:
public class Main {
public static void main(String[] args) {
Integer x = new Integer(22);
System.out.println(x instanceof Integer);
}
}
कन्सोलवर काय प्रदर्शित केले जाईल असे तुम्हाला वाटते? ठीक आहे, हे येथे स्पष्ट आहे. :) x ऑब्जेक्ट पूर्णांक आहे, त्यामुळे परिणाम सत्य असेल . कन्सोल आउटपुट: ट्रू ही स्ट्रिंग आहे की नाही ते तपासण्याचा प्रयत्न करूया :
public class Main {
public static void main(String[] args) {
Integer x = new Integer(22);
System.out.println(x instanceof String); // Error!
}
}
आम्हाला एक त्रुटी आली. आणि लक्ष द्या: कोड चालवण्यापूर्वी कंपाइलरने त्रुटी निर्माण केली! याने ताबडतोब पाहिले की पूर्णांक आणि स्ट्रिंग आपोआप एकमेकांमध्ये रूपांतरित होऊ शकत नाहीत आणि वारसा द्वारे संबंधित नाहीत. परिणामी, स्ट्रिंगवर आधारित पूर्णांक ऑब्जेक्ट तयार केला जात नाही . हे सोयीस्कर आहे आणि विचित्र रनटाइम त्रुटी टाळण्यास मदत करते, म्हणून कंपाइलरने आम्हाला येथे मदत केली :) आता अधिक कठीण असलेल्या उदाहरणांचा विचार करण्याचा प्रयत्न करूया. आम्ही वारशाचा उल्लेख केल्यामुळे, चला खालील वर्गांच्या लहान प्रणालीसह कार्य करूया:
public class Animal {
}
public class Cat extends Animal {
}
public class MaineCoon extends Cat {
}
एखादी वस्तू वर्गाची उदाहरणे आहे की नाही हे आपण तपासतो तेव्हा instanceof कसे वागते हे आपल्याला आधीच माहित आहे , परंतु आपण पालक-मुलाच्या नातेसंबंधाचा विचार केल्यास काय होते? उदाहरणार्थ, या अभिव्यक्तीतून काय प्राप्त होईल असे तुम्हाला वाटते:
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat instanceof Animal);
System.out.println(cat instanceof MaineCoon);
}
}
आउटपुट: खरे असत्य मुख्य प्रश्नाचे उत्तर देणे आवश्यक आहे की उदाहरणाचा 'वर्गावर आधारित ऑब्जेक्ट तयार केलेला' कसा अर्थ लावला जातो? ' प्राण्यांचे मांजरीचे उदाहरण ' हे खरे आहे , परंतु निश्चितपणे आपल्याला त्या शब्दात दोष सापडू शकतो. प्राणी वर्गावर आधारित मांजरीची वस्तू का तयार केली जाते ? तो केवळ स्वतःच्या वर्गावर आधारित नाही का? उत्तर पुरेसे सोपे आहे, आणि आपण आधीच तो विचार केला असेल. ऑब्जेक्ट बनवताना कन्स्ट्रक्टर्स ज्या क्रमाने कॉल केले जातात आणि व्हेरिएबल्स सुरू केले जातात ते लक्षात ठेवा. क्लास कन्स्ट्रक्टर बद्दलच्या लेखात आम्ही हा विषय आधीच कव्हर केला आहे . त्या धड्यातील एक उदाहरण येथे आहे:
public class Animal {
String brain = "Initial value of brain in the Animal class";
String heart = "Initial value of heart in the Animal class";
public static int animalCount = 7700000;
public Animal(String brain, String heart) {
System.out.println("Animal base class constructor is running");
System.out.println("Have the variables of the Animal class already been initialized?");
System.out.println("Current value of static variable animalCount = " + animalCount);
System.out.println("Current value of brain in the Animal class = " + this.brain);
System.out.println("Current value of heart in the Animal class = " + this.heart);
System.out.println("Have the variables of the Cat class already been initialized?");
System.out.println("Current value of static variable catCount = " + Cat.catCount);
this.brain = brain;
this.heart = heart;
System.out.println("Animal base class constructor is done!");
System.out.println("Current value of brain = " + this.brain);
System.out.println("Current value of heart = " + this.heart);
}
}
public class Cat extends Animal {
String tail = "Initial value of tail in the Cat class";
static int catCount = 37;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
System.out.println("The Cat class constructor has started (The Animal constructor already finished)");
System.out.println("Current value of static variable catCount = " + catCount);
System.out.println("Current value of tail = " + this.tail);
this.tail = tail;
System.out.println("Current value of tail = " + this.tail);
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
आणि जर तुम्ही ते IDE मध्ये चालवले, तर कन्सोल आउटपुट असे दिसेल: Animal base class constructor चालू आहे Animal class चे व्हेरिएबल्स आधीच सुरू केले आहेत का? स्टॅटिक व्हेरिएबल एनिमल काउंट = 7700000 मेंदूचे सध्याचे मूल्य प्राणी वर्गातील मेंदूचे प्रारंभिक मूल्य प्राणी वर्गातील हृदयाचे वर्तमान मूल्य = प्राणी वर्गातील हृदयाचे प्रारंभिक मूल्य मांजर वर्गाचे व्हेरिएबल्स आधीपासूनच आहेत प्रारंभ केला आहे? स्टॅटिक व्हेरिएबलचे वर्तमान मूल्य catCount = 37 Animal base class constructor पूर्ण झाले! मेंदूचे वर्तमान मूल्य = मेंदूचे वर्तमान मूल्य हृदय = हृदय मांजरीचे वर्ग बांधणारा सुरू झाला आहे (प्राणी बांधणारा आधीच पूर्ण झाला आहे) स्थिर व्हेरिएबलचे वर्तमान मूल्य catCount = 37 शेपटीचे वर्तमान मूल्य = मांजर वर्गातील शेपटीचे प्रारंभिक मूल्य = शेपटीचे वर्तमान मूल्य शेपूट आता तुम्हाला आठवत आहे का? :) बेस क्लासचा कंस्ट्रक्टर, जर बेस क्लास असेल तर, ऑब्जेक्ट तयार करताना नेहमी प्रथम कॉल केला जातो. ए ऑब्जेक्ट बी क्लासच्या आधारे तयार केला गेला आहे की नाही हे निर्धारित करण्याचा प्रयत्न करताना ऑपरेटरचे उदाहरण या तत्त्वाद्वारे मार्गदर्शन केले जाते . जर बेस क्लास कन्स्ट्रक्टर म्हटले तर शंकाच नाही. दुसऱ्या तपासणीसह, सर्वकाही सोपे आहे:
System.out.println(cat instanceof MaineCoon);
जेव्हा कॅट ऑब्जेक्ट तयार केला गेला तेव्हा MaineCoon कन्स्ट्रक्टरला कॉल केले गेले नाही , जे अर्थपूर्ण आहे. शेवटी, मेनकून हा मांजरीचा वंशज आहे , पूर्वज नाही. आणि हे मांजरीसाठी टेम्पलेट नाही . ठीक आहे, मला वाटते की आम्ही याबद्दल स्पष्ट आहोत. पण आपण असे केल्यास काय होईल?:
public class Main {
public static void main(String[] args) {
Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
}
}
हम्म... आता ते कठीण आहे. त्यावर बोलूया. आमच्याकडे एक Cat व्हेरिएबल आहे ज्याला आम्ही MaineCoon ऑब्जेक्ट नियुक्त केला आहे. तसे, ते का चालते? आपण ते करू शकतो, बरोबर? हो आपण करू शकतो. सर्व केल्यानंतर, प्रत्येक MaineCoon एक मांजर आहे. ते पूर्णपणे स्पष्ट नसल्यास, आदिम प्रकार रुंद करण्याचे उदाहरण लक्षात ठेवा:
public class Main {
public static void main(String[] args) {
long x = 1024;
}
}
1024 ही संख्या लहान आहे : ती सहजपणे एका लांब व्हेरिएबलमध्ये बसते, कारण त्यात सामावून घेण्यासाठी पुरेसे बाइट्स आहेत (बाहुल्यांचे उदाहरण लक्षात ठेवा?). वंशज ऑब्जेक्ट नेहमी पूर्वज व्हेरिएबलला नियुक्त केले जाऊ शकते. आत्तासाठी, फक्त हे लक्षात ठेवा, आणि त्यानंतरच्या धड्यांमध्ये आम्ही ते कसे कार्य करते याचे विश्लेषण करू. तर आमचे उदाहरण आउटपुट काय करते?
Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
तपासण्याचे उदाहरण काय असेल ? आमचे कॅट व्हेरिएबल किंवा आमचे मेनकून ऑब्जेक्ट? या प्रश्नाचे उत्तर खरे तर सोपे आहे. तुम्हाला फक्त ऑपरेटरची व्याख्या पुन्हा वाचण्याची आवश्यकता आहे: X व्हेरिएबलद्वारे संदर्भित ऑब्जेक्ट काही Y वर्गाच्या आधारे तयार केले गेले आहे की नाही हे तपासण्यासाठी ऑपरेटरची उदाहरणे आवश्यक आहेत . ऑपरेटरचे उदाहरण ऑब्जेक्टच्या उत्पत्तीची चाचणी करते, व्हेरिएबल प्रकाराची नाही. अशा प्रकारे, या उदाहरणात, आमचा प्रोग्राम दोन्ही प्रकरणांमध्ये सत्य दर्शवेल : आमच्याकडे MaineCoon ऑब्जेक्ट आहे. अर्थात, हे MaineCoon वर्गावर आधारित तयार केले गेले होते , परंतु ते मांजरीवर आधारित तयार केले गेले होतेपालक वर्ग तसेच!
GO TO FULL VERSION