Say there’s the following base class:
package bg.svetlin.ui.controls;
public abstract class Control {
protected int getHeight() {
//..
}
//...
}
Also, in the same package, there’s a class that inherits:
package bg.svetlin.ui.controls;
public abstract class LayoutControl extends Control {
public abstract void addControl(Control control);
//...
}
Then, there’s a third class in another package:
package bg.svetlin.ui.controls.screen;
public abstract class Screen extends LayoutControl {
//...
}
And, finally, there’s the implementation class, again in a different package:
package bg.svetlin.ui.controls.screen.list;
public class List extends Screen {
private final Vector controls = new Vector();
public void addControl(Control control) {
height += control.getHeight();
controls.addElement(control);
}
}
Even though List inherits from Control, and the getHeight() is protected, there’s the following error:
getHeight() has protected access in bg.svetlin.ui.controls.Control
I’ve checked that my imports are right. I’m using NetBeans.
Any idea what’s wrong? I thought protected fields and methods are visible to the children even if the latter are in a different package.
Thanks!
That’s correct. The class itself has an access to the inherited protected members. But, what you’re trying to do it to call the
getHeightmethod on some Control reference. You’re allowed to call it only on this instance!For a better understanding, let me quote Kathy Sierra’s SCJP Preparation Guide: