मैं इस बात पर असमंजस में हूँ कि ओवरराइडिंग जावा में छिपने से कैसे अलग है। क्या कोई इस बारे में अधिक जानकारी प्रदान कर सकता है कि ये कैसे भिन्न हैं? मैंने जावा ट्यूटोरियल पढ़ा लेकिन नमूना कोड अभी भी मुझे भ्रमित करता है।
अधिक स्पष्ट होने के लिए, मैं अच्छी तरह से ओवरराइड करना समझता हूं। मेरा मुद्दा यह है कि मैं यह नहीं देखता कि छिपाना कितना अलग है, इस तथ्य को छोड़कर कि एक उदाहरण स्तर पर है जबकि दूसरा वर्ग स्तर पर है।
जावा ट्यूटोरियल कोड को देखते हुए:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
फिर हमारे पास एक उपवर्ग है Cat
:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
फिर वे कहते हैं:
इस कार्यक्रम से आउटपुट निम्नानुसार है:
पशु में कक्षा विधि।
कैट में उदाहरण विधि।
मेरे लिए, यह तथ्य कि क्लास testClassMethod()
से सीधे क्लास पद्धति को कॉल करना क्लास में विधि को Animal
निष्पादित करता Animal
है, बहुत स्पष्ट है, वहां कुछ खास नहीं है। फिर वे testInstanceMethod()
एक संदर्भ से कॉल करते हैं myCat
, इसलिए फिर से स्पष्ट है कि निष्पादित विधि फिर उसी के उदाहरण में एक है Cat
।
मैं जो देख रहा हूं, वह कॉल छिपाना ओवरराइडिंग की तरह ही व्यवहार करता है, इसलिए वह अंतर क्यों करता है? यदि मैं उपरोक्त कक्षाओं का उपयोग करके यह कोड चलाता हूं:
Cat.testClassMethod();
मैं ले आता हूँ:
बिल्ली में कक्षा विधि।
लेकिन अगर मैं testClassMethod()
कैट से हटाता हूं , तो मुझे मिलेगा:
एनीमल में क्लास विधि।
जो मुझे दिखाता है कि एक स्थिर विधि लिखने के साथ, माता-पिता में एक ही हस्ताक्षर के साथ, एक उपवर्ग में बहुत अधिक ओवरराइड करता है।
उम्मीद है कि मैं स्पष्ट कर रहा हूं कि मैं कहां उलझन में हूं और कोई कुछ प्रकाश डाल सकता है। अग्रिम में ही बहुत शुक्रिया!