在Java中,是否可以重写子类中的成员数据,并且该重写版本是否可以用作超类实现中的数据?
换句话说,这就是我想要实现的目标,但没有发生:
abstract public class BasicStuff {
protected String[] stuff = { "Pizza", "Shoes" };
public void readStuff() {
for(String p : stuff) {
system.out.println(p);
}
}
}
..
public class HardStuff extends BasicStuff {
protected String[] stuff = { "Harmonica", "Saxophone", "Particle Accelerator" };
}
此调用:
HardStuff sf = new HardStuff();
sf.readStuff();
...打印Pizza
和Shoes
。我希望它打印后者。
我认识到,这是一种较差的分层OO实践。在进行XML配置和反射时,我需要一个非常特定的案例。
是否有可以使这种情况发生的修饰符?
是的,我的确知道有人可以使用包装器来解决我的子类中的这个问题,例如,通过指示包装器的内容stuff[]
现在存储在具有不同名称的数组中。我只是想保持简单,原则上很好奇。
在此先多谢!
我相信您必须插入访问器方法,即使用:
for(String p : getStuff()) {
在超类中,并添加:
protected String[] getStuff() { return stuff; }
无论您在哪里protected String[] stuff
重新定义。
覆盖实际上适用于方法,而不是数据(至少在Java模型中是如此;其他语言则有所不同),因此,要获得覆盖效果,您必须插入一个方法(通常是一个简单的访问器,如此处所示) )。它实际上并没有使事情复杂化,它只是一种非常简单的方法,可以指示Java编译器本质上使用所需行为所需的“间接附加级别”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句