Java-为什么受保护的函数不能用于此函数

Java-为什么受保护的函数不能用于此函数,java,Java,为什么,如果prova受到保护,我就不能使用super访问它? 欢呼声页面中心从FlowPanel扩展,而不是从PageIndex扩展。看起来FlowPanel没有名为prova 如果希望PageCenter使用super关键字从PageIndex访问受保护的属性,则应从PageIndex扩展 package portale.interfaccia; public class PageIndex extends FlowPanel { protected Integer prova;

为什么,如果prova受到保护,我就不能使用super访问它?
欢呼声

页面中心从FlowPanel扩展,而不是从PageIndex扩展。看起来
FlowPanel
没有名为
prova

如果希望
PageCenter
使用
super
关键字从
PageIndex
访问受保护的属性,则应从
PageIndex
扩展

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;
    }
}
如果希望这两个类都从
FlowPanel
扩展,请尝试重构代码,以便
PageIndex
PageCenter
了解一些实用程序类

public class PageCenter extends PageIndex{

   public PageCenter(){
      prova = 2;
   }
}
然后你可以这样使用它:

public class ProvaUtility{

    private Integer prova;

    public Integer getProva(){}

    public void setProva(Integer p){}
}
如果传递此引用不适合您,请尝试使用

然后通过以下方式进行调用:


ProvaInstance.getInstance().getProva()

页面中心从FlowPanel扩展,而不是从PageIndex扩展。看起来
FlowPanel
没有名为
prova

如果希望
PageCenter
使用
super
关键字从
PageIndex
访问受保护的属性,则应从
PageIndex
扩展

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;
    }
}
如果希望这两个类都从
FlowPanel
扩展,请尝试重构代码,以便
PageIndex
PageCenter
了解一些实用程序类

public class PageCenter extends PageIndex{

   public PageCenter(){
      prova = 2;
   }
}
然后你可以这样使用它:

public class ProvaUtility{

    private Integer prova;

    public Integer getProva(){}

    public void setProva(Integer p){}
}
如果传递此引用不适合您,请尝试使用

然后通过以下方式进行调用:


PageCenter
类中的
ProvaInstance.getInstance().getProva()
super
指的是
FlowPanel
,因为它正在扩展

PageCenter
如果不引用该对象,就无法知道它是
PageIndex
的成员

我认为您混淆了继承变量和实例变量


protected
将允许当前类和从其继承的任何类进行访问。它不允许同一个包中的其他类访问它。

super
在您的
PageCenter
类中,它指的是
FlowPanel
,因为这是它所扩展的

PageCenter
如果不引用该对象,就无法知道它是
PageIndex
的成员

我认为您混淆了继承变量和实例变量



protected
将允许当前类和从其继承的任何类进行访问。它不允许同一个包中的其他类访问它。

您必须使PageCenter扩展PageIndex。

您必须使PageCenter扩展PageIndex。

uhm..但是受保护的属性应该显示同一包中的每个变量,而不是同一个包,只要它是同一对象的扩展。PageCenter与PageIndex完全无关。是的,你的解决方案有效!!!唯一的问题是,我需要通过每次的参考,我有很多的扩展。Thank man:)但是如果每个类都在同一个包中,就没有办法为每个类共享一个变量?@markzzz,没有。更清楚的是,protected将允许任何扩展它的类访问该成员变量或方法,而不管包是什么。指定无访问修饰符是限制包私有的唯一方法。在JVM中共享某些状态的需要常常是人们发明单例的原因。从技术上讲,包私有静态实用程序类可用于转储值,以便在多个类之间共享。但是,这是一个有缺陷的全局状态模式,它会导致不稳定的代码和奇怪的系统错误。嗯……但是受保护的属性应该显示同一个包中的每个变量,而不是同一个包,只要它是同一对象的扩展。PageCenter与PageIndex完全无关。是的,你的解决方案有效!!!唯一的问题是,我需要通过每次的参考,我有很多的扩展。Thank man:)但是如果每个类都在同一个包中,就没有办法为每个类共享一个变量?@markzzz,没有。更清楚的是,protected将允许任何扩展它的类访问该成员变量或方法,而不管包是什么。指定无访问修饰符是限制包私有的唯一方法。在JVM中共享某些状态的需要常常是人们发明单例的原因。从技术上讲,包私有静态实用程序类可用于转储值,以便在多个类之间共享。然而,这是一个有缺陷的全局状态模式,它会导致不稳定的代码和奇怪的系统错误。嗯。。。!那么,我如何为整个包共享该变量呢?如果您希望在类之间共享一个变量,那么必须将包含该变量的对象注入到所有要共享该变量的对象中,或者创建一个具有默认保护的静态变量并访问该变量。(记住——对于静态,要小心线程)嗯,我对并发性没有问题。我怎样才能访问静态变量呢?啊哈…没错,super将FlowPanel称为超类。嗯。。。!那么,我如何为整个包共享该变量呢?如果您希望在类之间共享一个变量,那么必须将包含该变量的对象注入到所有要共享该变量的对象中,或者创建一个具有默认保护的静态变量并访问该变量。(记住——对于静态,要小心线程)嗯,我对并发性没有问题。如何访问静态变量?