Say nie dodaje klasy bazowej:Dlaczego nie można wywołać metody chronionej z klasy dziedziczącej w innym pakiecie w języku Java?
package bg.svetlin.ui.controls;
public abstract class Control {
protected int getHeight() {
//..
}
//...
}
Ponadto, w tym samym opakowaniu, jest to klasa, która dziedziczy:
package bg.svetlin.ui.controls;
public abstract class LayoutControl extends Control {
public abstract void addControl(Control control);
//...
}
Następnie, nie ma trzeciej klasy w innym opakowaniu:
package bg.svetlin.ui.controls.screen;
public abstract class Screen extends LayoutControl {
//...
}
I wreszcie jest klasa implementacji, również w innym pakiecie:
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);
}
}
chociaż List
dziedziczy z Control
, a getHeight()
jest protected
, jest następujący błąd:
getHeight() has protected access in bg.svetlin.ui.controls.Control
Sprawdziłem, że moi import rację. Używam NetBeans.
Każdy pomysł, co jest nie tak? Myślałem, że pola i metody są widoczne dla dzieci, nawet jeśli te ostatnie znajdują się w innym pakiecie.
Dzięki!
W swojej klasy abstrakcyjnej metoda jest 'getWidth()', w podklasie używasz 'getHeight()'. Czy to dlatego, że jest to przykładowy kod? – Ash
Tak. Dzięki, że to zauważyłeś. –