package portale.interfaccia;
public class PageIndex extends FlowPanel {
protected Integer prova;
private PageCenter center;
public PageIndex() {
this.center=new PageCenter();
this.add(center);
}
}
package portale.interfaccia;
public class PageCenter extends FlowPanel {
public PageCenter() {
super.prova=2;
}
}
为什么,如果prova受到保护,我无法使用super访问它? 干杯
答案 0 :(得分:3)
PageCenter从FlowPanel扩展,而不是从PageIndex扩展。看起来FlowPanel
没有名为prova
如果您希望PageCenter
使用PageIndex
关键字从super
访问受保护的属性,则应该从PageIndex
延伸。
public class PageCenter extends PageIndex{
public PageCenter(){
prova = 2;
}
}
如果您希望这两个类都从FlowPanel
扩展,请尝试重构您的代码,以便PageIndex
和PageCenter
知道某个实用程序类。
public class ProvaUtility{
private Integer prova;
public Integer getProva(){}
public void setProva(Integer p){}
}
然后你可以像这样使用它:
public class PageIndex extends FlowPanel{
private ProvaUtility utility;
private PageCenter center;
public PageIndex(ProvaUtility pu){
this.utility = pu;
this.center = new PageCenter(pu);
this.add(this.center);
}
public Integer getProva(){
return this.utility.getProva();
}
}
public class PageCenter extends FlowPanel{
private ProvaUtility utility;
public PageCenter(ProvaUtility u){
this.utility = u;
this.utility.setProva(2);
}
}
如果传递此引用并不适合您,请尝试使用Singleton
class ProvaSingleton{
private static ProvaSingleton instance = null;
private Integer prova;
private ProvaSingleton(){
prova = 2;
}
public static ProvaSingleton getInstance(){
if (instance == null){
instance = new ProvaSingleton();
}
return instance;
}
public Integer getProva(){ return this.prova;}
public void setProva(Integer p){this.prova = p;}
}
然后通过以下方式调用它:
ProvaInstance.getInstance().getProva()
答案 1 :(得分:1)
super
课程中的 PageCenter
指的是FlowPanel
,因为它正在扩展。
PageCenter
无法在不引用该对象的情况下知道它是PageIndex
的成员。
我相信你会混淆继承和实例变量。
protected
将允许当前类和从其继承的任何类进行访问。它不允许同一个包中的其他类访问它。
答案 2 :(得分:0)
您必须使PageCenter扩展PageIndex。