मेरे पास कक्षा Child
है जो Parent
फैली हुई है।क्या माता-पिता के उदाहरण के उदाहरण वापस आते हैं?
Parent child = new Child();
if (child instanceof Parent){
// Do something
}
क्या यह सच या गलत लौटाता है, और क्यों?
मेरे पास कक्षा Child
है जो Parent
फैली हुई है।क्या माता-पिता के उदाहरण के उदाहरण वापस आते हैं?
Parent child = new Child();
if (child instanceof Parent){
// Do something
}
क्या यह सच या गलत लौटाता है, और क्यों?
Yes, यह होगा। और यह क्यों नहीं होना चाहिए?
क्योंकि बच्चे वास्तव में माता-पिता का एक उदाहरण है। आप
if (child instanceof Child){
}
जाँच हैं, तो आप केवल एक बच्चे के लिए एक कार्रवाई करने के लिए करना चाहिए लेकिन अगर आप प्रभावी सी से निम्न कथन याद रखना चाहिए ++, स्कॉट Meyers द्वारा:
"जब भी आप पाते हैं अपने आप को लेखन फार्म के कोड "अगर वस्तु प्रकार T1 की है, तो कुछ करना है, लेकिन अगर यह प्रकार टी 2 की है, तो कुछ और , करना" अपने आप को तमाचा।
जो मुझे लगता है कि इस मामले में भी लागू होता है। यदि आप करना चाहते हैं तो संदर्भित ऑब्जेक्ट किस प्रकार की श्रेणी से संबंधित है, निम्न कोड संरचना से आपकी सहायता करनी चाहिए।
नोट: मैंने इसे संकलित नहीं किया है।
class Parent {
public void doSomething() {
System.out.println("I am the Parent, and I do as I like");
}
}
class ChildA extends Parent {
public void doSomething() {
System.out.println("I am a child named A, but I have my own ways, different from Parent");
}
}
class ChildB extends Parent {
public void doSomething() {
System.out.println("I am a child named B, but I have my own ways, different from my Parent and my siblings");
}
}
public class Polymorphism101 {
public static void main() {
Parent p = new Parent();
p.doSomething();
p = new ChildA();
p.doSomething();
p = new ChildB();
p.doSomething();
}
}
instanceof सच वापस आ जाएगी अगर यह एक उपवर्ग है ...
बिल्कुल यह सच रिटर्न क्योंकि बच्चे माता-पिता
हाँ का एक उदाहरण है। instanceof
जब भी संदर्भ (instanceof
अभिव्यक्ति के बाईं तरफ) को संदर्भ प्रकार (instanceof
अभिव्यक्ति के दाईं ओर वाला प्रकार) पर डाला जा सकता है। यह अपने माता पिता के संबंध में उपवर्गों के लिए सच हो जाएगा:
Child child = new Child();
Parent parent = (Parent) child; //works!
assert child instanceof Parent; //true
The Java Language Specification, Java SE 9 Edition से:
15.20. Relational Operators
...
RelationalExpression instanceof ReferenceType15.20.2. Type Comparison Operator instanceof
...
रन समय,instanceof
ऑपरेटर का परिणामtrue
है अगर RelationalExpression का मूल्यnull
नहीं है और संदर्भ एकClassCastException
को ऊपर उठाने के बिना ReferenceType लिए डाली जा सकती है। अन्यथा परिणामfalse
है।
लेकिन मैं रनटाइम में ऑब्जेक्ट प्रकार निर्धारित करता हूं और मुझे सभी प्रकार के बच्चों को पकड़ने के लिए अभिभावक संदर्भ को परिभाषित करने की आवश्यकता होती है। मैं इसे दूसरी तरह से कैसे कर सकता हूं? – ikbal
@ user479129: आप किसी भी माता-पिता के बच्चे के संदर्भ में माता-पिता के संदर्भ में संदर्भ ले सकते हैं। ऐसा है कि यदि कोई 'वर्ग अभिभावक {} 'और' कक्षा चाइल्डए माता-पिता 'बढ़ाता है और' कक्षा चाइल्डबी अभिभावक 'बढ़ाता है तो आप' चाइल्डए 'या' चाइल्डबी 'प्रकार की वस्तु को संदर्भित करने के लिए' माता-पिता पी 'का उपयोग कर सकते हैं, लेकिन मैं दूसरे तरीके से आपका मतलब क्या न हो। –
मुझे उस ऑब्जेक्ट को नियंत्रित करने की आवश्यकता है पी अपने बच्चे का एक प्रकार है, माता-पिता नहीं। कुछ मामलों में यह अभिभावक प्रकार हो सकता है इसलिए मुझे यह जांचने की ज़रूरत है कि यह वही प्रकार है जो मैं चाहता हूं। वह जो मैं चाहता हूँ। मुझे उम्मीद है कि यह स्पष्ट है – ikbal