The "super" reference

I am trying to utilize inheritance to use variables from a parent class in a child class. So that I don't have to repeat everything, I am simply using the " super(parameters) ; " statement. But when I do this I keep getting an error that says, "error: can not reference variable before supertype constructor has been called."

I don't know what this is telling me to do.

I'm using jgrasp writing java.
aminkeithAsked:
Who is Participating?
 
Gibu GeorgeConnect With a Mentor Chief Technology OfficerCommented:
If you want to use the instance variables of the super class in child class, you need to make those instance variables protected instead of private, then in the first line of code in the constructor of the child class should the super() call, with super class constructor parameters
0
 
dpearsonConnect With a Mentor Commented:
Can you post the code that is having this problem?

If I had to guess it sounds like you might have:

public class MyBase {
    protected int value ;

    public MyBase(int theValue) {
        value  =theValue ;
    }
}

public class Child extends MyBase {
    public Child(int theValue) {
       super(value) ;  // Accidentally using base class's variable
    }
}

But if you post the code it'll be easier to figure out :)

Doug
0
 
zzynxConnect With a Mentor Software engineerCommented:
>> can not reference variable before supertype constructor has been called
The first thing to do in a method you override is calling super()
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
ValeriConnect With a Mentor Commented:
it means that you are trying to use variable (the one that is mentioned in the error message) that is still not created, because the object that this variable is part of is still not created.
When you invoke "super(parameters);" probably one of your parameters is member of the child class or base class, both of them are still not created.
Also keep in mind that "super" should be the first line in the constructor of the child classes.

Shoud be something like that:

public class Base {
    protected int valueBase ;

    public Base(int theValue) {
        valueBase = theValue ;
    }
}

public class Child extends Base {
    private int valueChild;

    public Child(int theValue) {
       super(theValue) ; // creates the base class first
       valueChild = theValue;      
    }
}
0
 
zzynxConnect With a Mentor Software engineerCommented:
>> The first thing to do in a method you override is calling super()
That should have been:
The first thing to do in a constructor you override is calling super()
0
 
aminkeithAuthor Commented:
Thanks all of you guys. I actually figured out what my problem was. I think I had them set to private instead of protected. Thanks anyway.
0
 
zzynxSoftware engineerCommented:
You're welcome.
Thanx 4 axxepting
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.