Java - 为什么受保护不能使用此功能

时间:2010-11-10 21:58:00

标签: java

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访问它? 干杯

3 个答案:

答案 0 :(得分:3)

PageCenter从FlowPanel扩展,而不是从PageIndex扩展。看起来FlowPanel没有名为prova

的属性

如果您希望PageCenter使用PageIndex关键字从super访问受保护的属性,则应该从PageIndex延伸。

public class PageCenter extends PageIndex{

   public PageCenter(){
      prova = 2;
   }
}

如果您希望这两个类都从FlowPanel扩展,请尝试重构您的代码,以便PageIndexPageCenter知道某个实用程序类。

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。