The protected access modifier in Java is an important concept that determines the visibility of class members (variables and methods). Here’s a detailed explanation of its scope and when to use it.
Scope of the Protected Access Modifier
- Same Package Access: Members declared as
protected
can be accessed by any class within the same package. This means that if you have multiple classes in the same package, they can freely access each other’s protected members. - Subclass Access: Members declared as
protected
can also be accessed by subclasses, even if those subclasses are in different packages. This allows derived classes to utilize the functionality of their parent class without being restricted by package boundaries.
Example
// Parent Class in package 'animals'
package animals;
public class Animal {
protected String type;
protected void displayType() {
System.out.println("Type: " + type);
}
}
// Subclass in a different package 'wildlife'
package wildlife;
import animals.Animal;
public class Lion extends Animal {
public Lion() {
this.type = "Lion"; // Accessing protected member
}
public void showType() {
displayType(); // Accessing protected method
}
}
In this example:
- The
Animal
class has a protected membertype
and a protected methoddisplayType()
. - The
Lion
class, which is a subclass ofAnimal
, is in a different package but can access the protected members ofAnimal
.
When to Use the Protected Access Modifier
- Inheritance: Use
protected
when you want to allow subclasses to access certain members while still hiding them from other classes. This is particularly useful in inheritance hierarchies where you want to provide a base class with functionality that derived classes can use or override. - Encapsulation: It helps in encapsulating the class’s internal workings while still allowing controlled access to subclasses. This is useful when you want to expose certain functionalities to subclasses without making them public.
- Package-Level Access: If you want to allow access to a member within the same package but restrict it from other packages (except through inheritance),
protected
is the appropriate choice.
Summary
The protected
access modifier is a powerful tool in Java that provides a balance between encapsulation and accessibility. It allows class members to be accessible within the same package and by subclasses in other packages, making it ideal for scenarios involving inheritance and controlled access.
In Hindi
प्रोटेक्टेड एक्सेस मॉडिफायर का स्कोप
प्रोटेक्टेड एक्सेस मॉडिफायर का स्कोप निम्नलिखित है:
- समान पैकेज एक्सेस: प्रोटेक्टेड के रूप में घोषित सदस्य उसी पैकेज के अंदर किसी भी क्लास द्वारा एक्सेस किए जा सकते हैं। यानी यदि आप एक ही पैकेज में कई क्लास रखते हैं, तो वे आपस में एक-दूसरे के प्रोटेक्टेड सदस्यों तक आसानी से पहुंच सकते हैं।
- सबक्लास एक्सेस: प्रोटेक्टेड के रूप में घोषित सदस्य सबक्लास द्वारा भी एक्सेस किए जा सकते हैं, भले ही वह सबक्लास अलग पैकेज में हो। यह माता-पिता क्लास की फंक्शनैलिटी का उपयोग करने की सबक्लास को अनुमति देता है, बिना पैकेज सीमाओं से बंधे रहने के।
उदाहरण
// पैकेज 'animals' में माता-पिता क्लास
package animals;
public class Animal {
protected String type;
protected void displayType() {
System.out.println("Type: " + type);
}
}
// अलग पैकेज 'wildlife' में सबक्लास
package wildlife;
import animals.Animal;
public class Lion extends Animal {
public Lion() {
this.type = "Lion"; // प्रोटेक्टेड सदस्य तक पहुंच
}
public void showType() {
displayType(); // प्रोटेक्टेड मेथड तक पहुंच
}
}
इस उदाहरण में:
Animal
क्लास में प्रोटेक्टेड सदस्यtype
और प्रोटेक्टेड मेथडdisplayType()
हैं।Lion
क्लास, जोAnimal
की सबक्लास है, अलग पैकेज में है लेकिनAnimal
के प्रोटेक्टेड सदस्यों तक पहुंच सकती है।
प्रोटेक्टेड एक्सेस मॉडिफायर का उपयोग कब करें?
- विरासत: जब आप चाहते हैं कि सबक्लास कुछ सदस्यों तक पहुंच कर सकें लेकिन अन्य क्लास से छिपे रहें, तो
protected
का उपयोग करें। यह विशेष रूप से विरासत श्रृंखला में उपयोगी है जहां आप माता-पिता क्लास को ऐसी फंक्शनैलिटी प्रदान करना चाहते हैं जिसका उपयोग या ओवरराइड व्युत्पन्न क्लास कर सकती हैं। - कैप्सूलीकरण: यह क्लास के आंतरिक कार्यों को कैप्सूलबद्ध करने में मदद करता है और साथ ही सबक्लास को नियंत्रित पहुंच प्रदान करता है। जब आप सबक्लास को कुछ फंक्शनैलिटी एक्सपोज़ करना चाहते हैं लेकिन उन्हें पब्लिक नहीं बनाना चाहते, तो यह उपयोगी होता है।
- पैकेज-लेवल एक्सेस: यदि आप किसी सदस्य तक पहुंच को उसी पैकेज में अनुमति देना चाहते हैं लेकिन अन्य पैकेज से (विरासत के माध्यम से) प्रतिबंधित करना चाहते हैं, तो
protected
उचित विकल्प है।