![]() |
VOOZH | about |
In Java, there are four types of access modifiers. These are public, private, default, and protected. To get the idea of these modifiers, you can refer to access modifiers in java. In this article, we discuss the accessibility of protected members in different cases.
Now let us discuss various scenarios of accessing protected members which are listed below as follows:
Case 1: Accessing protected members in the same class
We can access protected members of a class anywhere in it.
Example:
2021 Its 2021 !!
Case 2: Accessing protected members in other classes of the same package
We can access protected members of a class in another class that is present in the same package.
2021 Its 2021 !!
Case 3: Accessing protected members of a class in its subclass in the same package
We can access protected members of a class in its subclass if both are present in the same package.
Example
2021 Its 2021 !! geekforgeeks
Case 4: Accessing protected members in another class in a different package
We cannot access the protected members of a class in a class (non-subclass) that is present in a different package.
Example 1: Package 1
Example 2: Package 2
Output:
error: year has protected access in Sample System.out.println(sample.year); ^ error: printYear() has protected access in Sample sample.printYear(); ^ error: title has protected access in Sample System.out.println(Sample.title); ^
It will give a compile-time error. In the following example, we will create two classes. Sample class in package1 and Test class in package2 and try to access protected members of Sample class in Test class. It is justified in the above two examples.
Case 5: Accessing protected members in sub-class in a different package
We can access protected members of a class in its subclass present in a different package. In the following example, we will create two classes. Sample class in package1 and Child class in package2. Child class extends Sample class.
Example 1.1
Example 1.2
Output
2021 Its 2021 !! geeksforgeeks
Note: From the above output it can be perceived we have successfully accessed the protected members directly as these are inherited by the Child class and can be accessed without using any reference. The protected members are inherited by the child classes and can access them as its own members. But we can't access these members using the reference of the parent class. We can access protected members only by using child class reference.
Example 2
Output
error: year has protected access in Sample System.out.println(sample.year); ^ error: printYear() has protected access in Sample sample.printYear(); ^ error: printYear() has protected access in Sample child.printYear(); ^
So the main difference between default access modifiers and the protected modifier is that default members are accessible only in the current package. While protected members can be accessed anywhere in the same package and outside package only in its child class and using the child class's reference variable only, not on the reference variable of the parent class. We can't access protected members using the parent class's reference.