इन कक्षाओं में int a
चर पर विचार किया है:क्या होता है जब आधार और व्युत्पन्न वर्ग प्रत्येक में एक ही नाम के साथ चर
class Foo {
public int a = 3;
public void addFive() { a += 5; System.out.print("f "); }
}
class Bar extends Foo {
public int a = 8;
public void addFive() { this.a += 5; System.out.print("b "); }
}
public class test {
public static void main(String [] args){
Foo f = new Bar();
f.addFive();
System.out.println(f.a);
}
}
मैं समझता हूँ कि विधि addFive()
बच्चे कक्षा में अधिरोहित किया गया है, और कक्षा की परीक्षा में जब बाल वर्ग का संदर्भ देने वाले बेस क्लास संदर्भ का उपयोग ओवरराइड विधि को कॉल करने के लिए किया जाता है, तो addFive
के बाल वर्ग संस्करण को कॉल किया जाता है।
लेकिन सार्वजनिक उदाहरण परिवर्तनीय a
के बारे में क्या? क्या होता है जब दोनों बेस क्लास और व्युत्पन्न कक्षा में एक ही चर होता है?
उपरोक्त कार्यक्रम के उत्पादन
b 3
यह कैसे होता है है?
मैंने कोड में कुछ बदलाव किए हैं और यह नहीं समझ सकते कि क्या हो रहा है। मैंने बार में एक डिस्प्ले विधि जोड़ा और इसे मुख्य में बुलाया, लेकिन संकलक त्रुटि मिली। फू में एक डिस्प्ले विधि भी जोड़ा गया लेकिन आश्चर्यजनक रूप से बार के प्रदर्शन को निष्पादित किया गया। क्या यह जावा में एक दोष है? –
@ सुजानबाई वह बहुरूपता है। संकलन समय: प्रारंभिक बाध्यकारी: संदर्भ प्रकार पर जांच होती है। रन टाइम: देर से बाध्यकारी: वास्तविक वस्तु के प्रकार पर कॉल किया जाता है। –