Protected एक्सेस स्पेसिफायर उसी पैकेज के भीतर विजिबल होता है और सबक्लास में भी विजिबल होता है जबकि Default एक पैकेज लेवल एक्सेस स्पेसिफायर है और यह उसी पैकेज में विजिबल हो सकता है।
Protected Access Specifier
- Protected उसी पैकेज के भीतर पब्लिक की तरह काम करता है और पैकेज के बाहर प्राइवेट की तरह।
- Protected पैकेज के बाहर केवल सबक्लास ऑब्जेक्ट्स के संबंध में पब्लिक की तरह काम करता है।
- Protected फील्ड्स या मेथड्स का उपयोग क्लासेस और इंटरफेसेस के लिए नहीं किया जा सकता।
- protected घोषित फील्ड्स, मेथड्स, और कंस्ट्रक्टर्स को अन्य पैकेजेस में केवल सबक्लासेस द्वारा एक्सेस किया जा सकता है।
- उसी पैकेज की क्लासेस भी protected फील्ड्स, मेथड्स और कंस्ट्रक्टर्स को एक्सेस कर सकती हैं, भले ही वे protected मेंबर की क्लास की सबक्लास न हों।
उदाहरण
public class ProtectedTest {
// protected वेरिएबल्स
protected int age = 30;
protected String name = "Adithya";
/**
* यह मेथड protected घोषित है।
*/
protected String getInfo() {
return name + " is " + age + " years old.";
}
public static void main(String[] args) {
System.out.println(new ProtectedTest().getInfo());
}
}
आउटपुट
Adithya is 30 years old.
Default Access Specifier
- किसी क्लास के किसी मेंबर को बिना किसी एक्सेस स्पेसिफायर के मेंशन किया गया हो तो उसे Default माना जाता है।
- Default उसी पैकेज के भीतर पब्लिक की तरह काम करता है और पैकेज के बाहर प्राइवेट की तरह।
- किसी क्लास के Default मेंबर्स उसी पैकेज में किसी भी चीज़ के लिए उपलब्ध होते हैं और किसी भी स्थिति में पैकेज के बाहर उपलब्ध नहीं हो सकते।
- Default एक्सेस को केवल पैकेज लेवल तक सीमित करता है, यहां तक कि डिफ़ॉल्ट डेटा मेंबर्स वाली क्लास को एक्सटेंड करने के बाद भी हम उन्हें एक्सेस नहीं कर सकते।
उदाहरण
public class DefaultTest {
// वेरिएबल्स जिनमें कोई एक्सेस मोडिफायर नहीं है
int age = 25;
String name = "Jai";
/**
* यह मेथड डिफ़ॉल्ट एक्सेस स्पेसिफायर के साथ घोषित है
*/
String getInfo() {
return name + " is " + age + " years old.";
}
public static void main(String[] args) {
System.out.println(new DefaultTest().getInfo());
}
}
आउटपुट
Jai is 25 years old.