About Lesson
Private members of a superclass are not accessible directly in the subclass. They cannot be inherited directly by subclasses. Private members can be accessed indirectly in subclasses through public or protected getter and setter methods or other public methods provided by the superclass.
class SuperClass {
private int privateVar = 10;
private void privateMethod() {
System.out.println("Private method in SuperClass");
}
// Public getter method for privateVar
public int getPrivateVar() {
return privateVar;
}
// Public method to access privateMethod
public void callPrivateMethod() {
privateMethod();
}
}
class SubClass extends SuperClass {
void accessSuperClassMembers() {
// Cannot access privateVar directly
// System.out.println(privateVar); // Error: privateVar has private access in SuperClass
// Cannot call privateMethod directly
// privateMethod(); // Error: privateMethod() has private access in SuperClass
// Accessing privateVar through public getter method
System.out.println("PrivateVar from SuperClass: " + getPrivateVar());
// Accessing privateMethod through public method
callPrivateMethod();
}
}
public class Main {
public static void main(String[] args) {
SubClass subClass = new SubClass();
subClass.accessSuperClassMembers(); // Output: PrivateVar from SuperClass: 10
// Private method in SuperClass
}
}
A private constructor prevents a class from being instantiated directly. It is often used in singleton patterns or utility classes. Subclasses cannot call the private constructor of the superclass, making inheritance impossible.
class SuperClass {
// Private constructor
private SuperClass() {
System.out.println("SuperClass private constructor");
}
}
// The following will produce a compilation error
class SubClass extends SuperClass {
// Error: SuperClass() has private access in SuperClass
}