Inheritance Internal mechanism in java

Internal Mechanism to support inheritance in java

In the evolution of language First came C => C++ => JAVA.

Java Virtaul machine specification provides lot of details of the internal mechanism, here we present a very naive way of how inheritance is supported internally.

 

Key Take Aways :

  • Every Java object has a virtual Table pointer along with its own instance members.
  • The base class Instance members are placed at start and then follows the member of Sub class.
  • The virtual table pointer of the object has the entries for all the functions associated with the class.
  • Irrespective of you point to a object using base class or sub class reference , the virtual table reference is known by both type of references.
  • The reason why using a reference of base class on a sub Class objects works is , the Sub Class has a bigger memory footprint as compared to base class.
  • The base class reference is only aware of the instance members and methods defined in its class.

 

class ParentClass {

    protected int parentState = 10;

    public String getState(){
        return  "parentState value is  " + parentState;
    }

}

public class ChildClass extends ParentClass{

     private int childSate = 20;

    @Override
    public String getState(){
        return  "childSate value is " + childSate;
    }

    public static void main(String[] args) {

        // parent refrence pointing to the child class
        ParentClass parent = new ChildClass();
        System.out.println("Parent class method call output is :  " + parent.getState());
        System.out.println("state field value of parent is     : " + parent.parentState);


        ChildClass child = (ChildClass) parent;
        System.out.println("Child class method call output is  :" + child.getState());

    }

}

OutPut is :

Parent class method call output is :  childSate value is 20
state field value of parent is     : 10
Child class method call output is  :childSate value is 20

[addToAppearHere]

Key take Aways :

  • For methods the concept of virtual pointers and table exist hence overriding works on methods.
  • For instance fields no such mechanism exist hence  fields can be hide but never overriden.
  • Static methods or fields are not part of object hence they never participate in Inheritance and can only be hide.
  • Using Reference of parent on child object only enables the parent to access the region marked “logically” as parent.
  • The logical marking is done by calculating the size of instance members in the parent class  when .class file is being generate.
  • if one uses javap -v on the generated class one can see invokevirtual call in the generated code.