Search code examples
javainheritanceaccess-modifiers

Using a private variable in a inherited class - Java


Need to have more understanding about the private variables and inheritance. Earlier my understanding was if there is field in a class and when I'm inheriting the class, the fields that is not restricted by access(private variables) will be there in the inherited class. But I'm able use the private variables in base class if there is a public g/setter method.

How can I imagine a private variable in a base class.?


Solution

  • class A {
      private int a;
      public A(int a) { this.a = a; }
      public int getA() {return a;}
    }
    
    class B extends A {
      public B(int b) { super(b); }
      public int getB() {return getA();}
    }
    
    int result = new B(10).getA();
    

    result will be 10. Private field a in class A is kind of inherited to B but B can't access it directly. Only by using the public/default/protected accessor methods defined in class A. B is A so it always has all the same fields that are in A and possible some new fields defined in class B.