संभव डुप्लिकेट:
The concept of shadowingजब जावाकास्ट करते समय जावा फ़ील्ड को कैसे संभालता है?
मैं कैसे कक्षाओं के क्षेत्र upcasting दौरान जावा में नियंत्रित किया जाता है के बारे में उलझन में हूँ। उदाहरण के लिए:
class SuperClass
{
String myString = "String in SuperClass";
public void myMethod()
{
System.out.println("Method in SuperClass");
}
}
class SubClass extends SuperClass
{
String myString = "String in SubClass";
public void myMethod()
{
System.out.println("Method in SubClass");
}
}
class Question
{
public static void main(String[] args)
{
SuperClass test = new SubClass();
// object test is an instance of SubClass
// but I am telling the compiler to treat it as SuperClass
test.myMethod();
System.out.println(test.myString);
}
}
आउटपुट:
Method in SubClass
String in SuperClass //Why is "String in SubClass" not used?
यह SubClass
वर्ग का एक उदाहरण है जब मैं एक वस्तु test
बनाएँ; हालांकि, मैं संकलक को SuperClass
के रूप में पेश करने के लिए कह रहा हूं। विधियों के काम के बारे में सबकुछ मुझे स्पष्ट है: यदि SuperClass
के लिए दी गई विधि को परिभाषित किया गया है, तो मैं केवल SubClass
के तरीकों का उपयोग करने में सक्षम हूं।
हालांकि, SuperClass
का एक क्षेत्र क्यों उपयोग किया जाता है जब मैं test
तक पहुंचने का प्रयास करता हूं। चूंकि test
SubClass
का एक उदाहरण है I myString
SubClass
में परिभाषित होने की अपेक्षा की जाएगी, ऐसा क्यों नहीं हो रहा है? मैं क्या खो रहा हूँ?
मुझे पता है कि मैं का माइस्ट्रिंग this
ऑपरेटर का उपयोग करके एक्सेस कर सकता हूं। उदाहरण के लिए, मैं सुपर क्लास में printMyString
विधि निर्धारित कर सकते हैं, और
public void printMyString()
{
System.out.println(this.myString);
}
SubClass
में से अधिलेखित है, तो मेरे सवाल का ज्यादातर कैसे आ SuperClass
के क्षेत्र test
में प्रयोग किया जाता है के बारे में है। शायद मुझे कुछ याद आ रही है?
मैंने जवाब खोजने की कोशिश की, और मुझे मिला सबसे नज़दीकी विषय Upcasting in Java and two separate object properties था, हालांकि मददगार, यह मेरे प्रश्न का उत्तर नहीं दिया।
अग्रिम में धन्यवाद
अच्छा सवाल @Akavall –