Understanding Inheritance in Java
Understanding inheritance with private, public , protected and default/package access specifier in Java
Public accessibility modifier rules are same for instance methods and instance variables.
packageA
├── ClientClassAInSamePackage.java
├── SubClassAInSamePackage.java
├── subPackageA
│ ├── ClientClassAinSameSubPackage.java
│ └── SubClassAinSameSubPackage.java
└── SuperClassA.java
packageB
├── ClientClassBInDifferentPackage.java
├── SubClassBInDifferentPackage.java
└── subPackageB
├── ClientClassBInDifferentSubPackage.java
└── SubClassBInDifferentSubPackage.java
Is SuperClassA Accessible :
Package | private accessibility | public accessibility | Protected accessibility | Default accessibility |
SubClassAInSamePackage | No | YES | YES | YES |
ClientClassAInSamePackage | No | YES | YES | YES |
SubClassAinSameSubPackage | No | YES | YES | NO |
ClientClassAinSameSubPackage | No | YES | NO | NO |
SubClassBInDifferentPackage | No | YES | YES | NO |
ClientClassBInDifferentPackage | No | YES | NO | NO |
SubClassBInDifferentSubPackage | No | YES | YES | NO |
ClientClassBInDifferentSubPackage | No | YES | NO | NO |
[addToAppearHere]
ChildClass extends from the SuperClass SubClassAInSamePackage Example :
package com.big.data.java.packageA;
public class SubClassAInSamePackage extends SuperClassA {
private int subClassAState = 20;
//getPrivateState() private method is not visible
@Override
public String getPublicState() {
return "SubClassAInSamePackage value is " + subClassAState;
}
@Override
protected String getProtectedState() {
return "SubClassAInSamePackage value is " + subClassAState;
}
@Override
String getDefaultState() { return "SubClassAInSamePackage value is " + subClassAState; }
public static void main(String[] args) {
// parent refrence pointing to the child class , SuperClassA and SubClassA are in same package
SuperClassA superVar = new SubClassAInSamePackage();
System.out.println("Parent class method call output for Public is : " + superVar.getPublicState());
System.out.println("Parent class method call output for Protected is : " + superVar.getProtectedState());
System.out.println("Parent class method call output for Private is : " + superVar.getDefaultState());
// Child refrence pointing to its own object
SubClassAInSamePackage child = (SubClassAInSamePackage) superVar;
System.out.println("Child class method call output for Public is " + child.getPublicState());
System.out.println("Child class method call output for Protected is " + child.getProtectedState());
System.out.println("Child class method call output for Private is " + child.getDefaultState());
}
}
[addToAppearHere]
Client Class : uses the reference and object of the SuperClass Example :
package com.big.data.java.packageA;
public class ClientClassAInSamePackage {
public static void main(String[] args) {
// accessing superClassA from a client class in the same package as that of the superClass
SuperClassA superClassA = new SuperClassA();
// Private is not accessible.
System.out.println("Parent class method call output for Public is : " + superClassA.getPublicState());
System.out.println("Parent class method call output for Protected is : " + superClassA.getProtectedState());
System.out.println("Parent class method call output for Default is : " + superClassA.getDefaultState());
//superClassA.getPrivateState() getPrivateState() private method is not visible
}
}