मैंने सुरक्षित और पैकेज निजी संशोधक के बीच मतभेदों पर विभिन्न लेख देखे हैं। एक बात मैं इन दो पदोंअंतर?
Isn't "package private" member access synonymous with the default (no-modifier) access?
इस में के बीच विरोधाभासी पाया स्वीकार किए जाते हैं जवाब कहते हैं
संरक्षित संशोधक निर्दिष्ट करता है कि कि सदस्य केवल अपने स्वयं के पैकेज में पहुँचा जा सकता है (पैकेज-प्राइवेट के साथ) और, इसके अलावा, किसी अन्य पैकेज में अपनी कक्षा के उप-वर्ग द्वारा।
Why the protected modifier behave differently here in Java subclass?
यह स्वीकार जवाब में कहा गया है कि
संरक्षित स्तर तक पहुँच संतुष्ट करने के लिए दो शर्तें पूरी होनी चाहिए:
- कक्षाएं एक ही पैकेज में होना चाहिए ।
- एक विरासत संबंध होना चाहिए।
वे विरोधाभासी नहीं हैं? अन्य लेखों की मेरी समझ से, पहली पोस्ट सही उत्तर देता है जो अन्य पैकेज में == पैकेज-निजी + सबक्लास सुरक्षित है।
यदि यह कथन सही है, तो क्यों इस कोड को मेरी उपवर्ग बिल्ली पर निम्न त्रुटि संदेश के साथ लाइन 17
The method testInstanceMethod() from the type Animal is not visible
सुपर और उपवर्ग के लिए मेरे कोड से नीचे हैं पर विफल रहता है।
package inheritance;
public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
protected void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}
package testpackage;
import inheritance.Animal;
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;
myAnimal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
कृपया स्पष्ट करें कि उपर्युक्त कोड विफल क्यों होता है। यह बहुत उपयोगी होगा। धन्यवाद
testInstanceMethod() का उपयोग करने के लिए आपको बिल्ली होना है। पशु को कास्टिंग पैकेज विधि में उस विधि तक पहुंच प्रतिबंधित करता है और चूंकि आपका मुख्य पैकेज अलग-अलग पैकेज में है, इसलिए कोड विफल हो जाता है। (मुझे लगता है कि यह संकलन भी नहीं करेगा)। हां विधि है लेकिन आपको इसे एक्सेस करने की अनुमति नहीं है क्योंकि इसे संरक्षित द्वारा पशु में घोषित किया गया है। – PSIXO
दूसरा कथन इस प्रकार तैयार किया जाना चाहिए था: * "संरक्षित स्तर की पहुंच को पूरा करने के लिए, ** ** दो स्थितियों में से एक को पूरा किया जाना चाहिए ..." * (उस उत्तर के नीचे मैंने जो टिप्पणी भी बनाई है उसे भी देखें।) – aioobe