मान लें कि मेरे पास कुछ सदस्यों के साथ एक वर्ग है, और सदस्यों के पास कक्षा की तुलना में कम प्रतिबंधक पहुंच संशोधक है।
एक ठोस उदाहरण हो सकता है:
package apples;
class A { // package private
public int foo() { // public (=> less restrictive than *package private*)
return 42;
}
}
मेरी समझ में वर्ग अभिगमन संशोधक जो सदस्य अभिगम संशोधक की तुलना में अधिक प्रतिबंधक है , कम प्रतिबंधक सदस्य अभिगम संशोधक को अधिरोहित कर देगा । तो एक कम प्रतिबंधात्मक सदस्य पहुंच संशोधक का कोई प्रभाव नहीं होना चाहिए।
- क्या मेरी समझ सही है?
- यदि नहीं, तो परिणाम क्या हैं?
- कम प्रतिबंधक सदस्य पहुंच संशोधक होने के लिए वैध कारण क्या हो सकते हैं?
- अंत में, पालन करने के लिए सबसे अच्छा अभ्यास क्या हैं ?
मैंने कुछ प्रयोग भी किए क्योंकि मुझे लगा कि एक बार जब मैं फ़ंक्शन संदर्भों को पास करना शुरू कर दूंगा तो इसके परिणाम हो सकते हैं, हालांकि तब भी एक्सेस संशोधक कोई मायने नहीं रखता।
मैंने जो स्थिति बनाई वह निम्नलिखित है:
apples.B
एक सार्वजनिक तरीका प्रदान करता हैbla()
जो एक संदर्भ देता हैapples.A.foo
।- फिर
pizzas.C
कॉलapples.B.bla
के लिए एक संदर्भ प्राप्त करने के लिएA.foo
है और यह कहता है। - इसलिए
A.foo()
प्रत्यक्ष रूप से दिखाई नहीं देता हैC
, लेकिन केवल परोक्ष रूप से सुलभ हैB.bla()
मैंने इसका परीक्षण किया और इससे कोई फ़र्क नहीं पड़ता कि मैं foo()
पैकेज के एक्सेस मॉडिफायर को निजी बनाता हूं या नहीं।
package apples;
import java.util.function.IntSupplier;
public class B {
public IntSupplier getReferenceToAFoo() {
A aInstance = new A();
return aInstance::foo;
}
}
package pizzas;
import apples.B;
import java.util.function.IntSupplier;
public class C {
private int callAFooIndirectly() {
B bInstance = new B();
IntSupplier intsupplier = bInstance.getReferenceToAFoo();
return intsupplier.getAsInt();
}
public static void main(String[] args) {
C cInstance = new C();
int i = cInstance.callAFooIndirectly();
System.out.println(i);
assert 42 == i;
}
}
java.util.Collections.SingletonSet<E>
हैprivate
मेंjava.util.Collections
)।