Giả sử có các lớp cơ sở sau đây:Tại sao tôi không thể gọi một phương thức được bảo vệ từ lớp kế thừa trong một gói khác trong Java?
package bg.svetlin.ui.controls;
public abstract class Control {
protected int getHeight() {
//..
}
//...
}
Ngoài ra, trong cùng một gói, có một lớp kế thừa:
package bg.svetlin.ui.controls;
public abstract class LayoutControl extends Control {
public abstract void addControl(Control control);
//...
}
Sau đó, có một lớp thứ ba trong một gói khác:
package bg.svetlin.ui.controls.screen;
public abstract class Screen extends LayoutControl {
//...
}
Và cuối cùng, có lớp triển khai, một lần nữa trong một gói khác:
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);
}
}
Mặc dù List
thừa hưởng từ Control
, và getHeight()
là protected
, có các lỗi sau:
getHeight() has protected access in bg.svetlin.ui.controls.Control
Tôi đã kiểm tra rằng hàng nhập khẩu của tôi là đúng. Tôi đang sử dụng NetBeans.
Bất kỳ ý tưởng nào là sai? Tôi nghĩ rằng các trường và phương thức protected
có thể hiển thị cho trẻ em ngay cả khi các trường này nằm trong một gói khác.
Cảm ơn!
Trong lớp trừu tượng của bạn, phương thức là 'getWidth()', trong lớp con bạn đang sử dụng 'getHeight()'. Đây có phải chỉ vì đó là mã ví dụ? – Ash
Có. Cảm ơn vì đã phát hiện ra điều này. –