Java-为什么受保护的函数不能用于此函数
为什么,如果prova受到保护,我就不能使用super访问它?Java-为什么受保护的函数不能用于此函数,java,Java,为什么,如果prova受到保护,我就不能使用super访问它? 欢呼声页面中心从FlowPanel扩展,而不是从PageIndex扩展。看起来FlowPanel没有名为prova 如果希望PageCenter使用super关键字从PageIndex访问受保护的属性,则应从PageIndex扩展 package portale.interfaccia; public class PageIndex extends FlowPanel { protected Integer prova;
欢呼声页面中心从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称为超类。嗯。。。!那么,我如何为整个包共享该变量呢?如果您希望在类之间共享一个变量,那么必须将包含该变量的对象注入到所有要共享该变量的对象中,或者创建一个具有默认保护的静态变量并访问该变量。(记住——对于静态,要小心线程)嗯,我对并发性没有问题。如何访问静态变量?