Search code examples
javainheritancesubclassprivatesuperclass

Adding specific values for inherited fields


I am having some trouble with inheritance (Student here). I need to be able to utilize 1 inherited private field for each subclass I make. Obviously subclasses cannot have access to inherited fields however when a new object is created that inherited private field is a part of that object. For my purposes though each subclass needs to have it's own specific value for that inherited field. My first attempt looks something like this:

Public class A {

    private int x = 0;

    public A(int n) {

        x = n;
    }

    public int useX() {

        return x;
    }
}

Public class B Extends A {
    int n = 1;

    public B() {
        super(n);
    }

    useX(); // Return 1?
}

Public class C Extends A {
    int n = 2;

    public B() {
        super(n);
    }

    useX(); // Return 2?
}

However my professors tell me that I could also be using a setter method inside of my Super class to create that new field, and from there I am confused. Can anyone help point me in the right direction?


Solution

  • An ordinary Java Bean provides public accessors and mutators (aka getters and setters) for it's fields. However, you could provide a protected setter. Something like,

    public class A {
        private int x = 0;
    
        public int getX() { // <-- the usual name.
            return x;
        }
    
        protected void setX(int x) {
            this.x = x;
        }
    }
    

    Then your subclasses can invoke that setter

    public class B extends A {
        public B() {
            super();
            setX(1);
        }
    }
    

    And then B.getX() (or B.useX() if you really prefer) will return 1.