Digamos que hay la siguiente clase base:¿Por qué no puedo llamar a un método protegido de una clase heredada en otro paquete en Java?
package bg.svetlin.ui.controls;
public abstract class Control {
protected int getHeight() {
//..
}
//...
}
También, en el mismo paquete, hay una clase que hereda:
package bg.svetlin.ui.controls;
public abstract class LayoutControl extends Control {
public abstract void addControl(Control control);
//...
}
Entonces, hay una tercera clase en otro paquete:
package bg.svetlin.ui.controls.screen;
public abstract class Screen extends LayoutControl {
//...
}
Y, finalmente, está la clase de implementación, nuevamente en un paquete diferente:
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);
}
}
A pesar de que List
hereda de Control
, y el getHeight()
es protected
, está el siguiente error:
getHeight() has protected access in bg.svetlin.ui.controls.Control
He comprobado que mis importaciones son correctas. Estoy usando NetBeans.
¿Alguna idea de qué pasa? Pensé que los campos y métodos protected
son visibles para los niños, incluso si estos últimos están en un paquete diferente.
Gracias!
En su clase abstracta es el método 'getWidth()', en la subclase que estés usando 'getHeight()'. ¿Esto es solo porque es un código de ejemplo? – Ash
Sí. Gracias por descubrir esto. –