Understanding the Protected Access Modifier in Java
📖 Scenario: Imagine you are creating a simple program with two classes: a parent class and a child class. You want to share some information between these classes but keep it hidden from other unrelated classes.
🎯 Goal: Build a Java program that shows how the protected access modifier allows a child class to access a variable from its parent class, but keeps it hidden from other classes.
📋 What You'll Learn
Create a parent class called Parent with a protected integer variable named number set to 10.
Create a child class called Child that extends Parent.
In the Child class, write a method called showNumber that returns the value of number.
Create a separate class called Main with a main method to create an object of Child and print the value returned by showNumber.
💡 Why This Matters
🌍 Real World
In real software, <code>protected</code> helps keep important data safe but still accessible to related parts of the program.
💼 Career
Understanding access modifiers like <code>protected</code> is essential for writing secure and well-structured Java code in professional development.
Progress0 / 4 steps
1
Create the Parent class with a protected variable
Create a class called Parent with a protected integer variable named number and set it to 10.
Java
Hint
Use the keyword protected before the variable type to allow child classes to access it.
2
Create the Child class that extends Parent
Create a class called Child that extends the Parent class.
Java
Hint
Use the keyword extends to make Child inherit from Parent.
3
Add a method in Child to access the protected variable
In the Child class, add a method called showNumber that returns the value of the protected variable number.
Java
Hint
Since number is protected, you can access it directly inside Child.
4
Create Main class to test access to protected variable
Create a class called Main with a main method. Inside main, create an object of Child and print the value returned by showNumber.
Java
Hint
Use System.out.println to print the value returned by showNumber.
Practice
(1/5)
1. Which statement best describes the protected access modifier in Java?
easy
A. It allows access only within the same class.
B. It allows access only within the same package, not subclasses outside.
C. It allows access from any class anywhere.
D. It allows access within the same package and to subclasses outside the package.
Solution
Step 1: Understand protected access scope
The protected modifier allows access to members within the same package and also to subclasses even if they are in different packages.
Step 2: Compare with other access levels
Private restricts access to the same class only, public allows everywhere, and default (package-private) allows only within the same package but not subclasses outside.
Final Answer:
It allows access within the same package and to subclasses outside the package. -> Option D
Quick Check:
Protected = same package + subclasses outside [OK]
Hint: Protected means package + subclass access [OK]
2. Which of the following is the correct way to declare a protected method in Java?
easy
A. private protected void myMethod() {}
B. public protected void myMethod() {}
C. protected void myMethod() {}
D. void protected myMethod() {}
Solution
Step 1: Recall Java access modifier syntax
In Java, access modifiers come before the return type and method name. Only one access modifier is allowed per method declaration.
Step 2: Identify valid syntax
protected void myMethod() {} correctly uses protected followed by the return type void and method name. Other options combine modifiers incorrectly or place them in wrong order.
Final Answer:
protected void myMethod() {} -> Option C
Quick Check:
Single access modifier before return type [OK]
Hint: Use only one access modifier before return type [OK]
Common Mistakes:
Combining multiple access modifiers
Placing modifiers after return type
Using invalid modifier combinations
3. Consider the following code in two packages:
package pkg1;
public class Parent {
protected int value = 10;
}
package pkg2;
import pkg1.Parent;
public class Child extends Parent {
public int getValue() {
return value;
}
}
public class Test {
public static void main(String[] args) {
Child c = new Child();
System.out.println(c.getValue());
}
}
What is the output when running Test.main?
medium
A. 0
B. 10
C. Compilation error due to access
D. Runtime error
Solution
Step 1: Check access of protected member in subclass outside package
The value field is protected in Parent. The Child class extends Parent and accesses value in getValue(). This is allowed because protected permits subclass access even outside the package.
Step 2: Trace the output of getValue()
The method returns value which is initialized to 10. So, printing c.getValue() outputs 10.
package pkg1;
public class Parent {
protected int data = 5;
}
package pkg2;
import pkg1.Parent;
public class Other {
public void printData() {
Parent p = new Parent();
System.out.println(p.data);
}
}
medium
A. Cannot access protected member from non-subclass in different package
B. No error, code runs fine
C. Syntax error in import statement
D. Cannot create instance of Parent class
Solution
Step 1: Analyze access of protected member from non-subclass outside package
The class Other is not a subclass of Parent and is in a different package. Accessing p.data is not allowed because protected members are accessible only within the same package or subclasses outside the package.
Step 2: Identify the error type
This causes a compilation error due to illegal access of a protected member from a non-subclass outside the package.
Final Answer:
Cannot access protected member from non-subclass in different package -> Option A
5. You have a class Animal in package zoo with a protected method makeSound(). You want to allow only subclasses in any package to use makeSound(), but prevent other classes in the same package from calling it. How can you achieve this?
hard
A. Declare makeSound() as protected and move other classes out of the package.
B. Declare makeSound() as protected and make other classes subclasses of Animal.
C. Declare makeSound() as private and provide a public wrapper method.
D. Declare makeSound() as protected and keep other classes in the same package.
Solution
Step 1: Understand protected access within package and subclasses
Protected members are accessible to all classes in the same package and to subclasses outside the package. So, classes in the same package can call makeSound() even if they are not subclasses.
Step 2: Restrict access to only subclasses
To prevent other classes in the same package from accessing makeSound(), you must move those classes to a different package. Then only subclasses (in any package) can access the protected method.
Final Answer:
Declare makeSound() as protected and move other classes out of the package. -> Option A
Quick Check:
Protected allows package + subclass; move non-subclass classes out [OK]
Hint: Protected allows package access; move classes to restrict [OK]
Common Mistakes:
Thinking protected blocks same-package classes
Making other classes subclasses to restrict access
Using private which blocks subclasses
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.