在 Java 中,是否可以覆盖子类中的成员数据,并让覆盖的版本成为父类(super class)实现中使用的数据?
换句话说,这就是我想要实现的目标,但它并没有发生:
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()) {
在父类(super class)中,添加:
protected String[] getStuff() { return stuff; }
只要你有一个protected String[] stuff
重定义。
Overriding 真正适用于方法,而不是数据(至少在 Java 模型中是这样;其他一些语言的处理方式不同),因此要获得覆盖效果,您必须插入一个方法(通常是一个非常简单的访问器,就像这里一样)。它根本不会使事情复杂化,它只是指示 Java 编译器本质上使用所需行为所需的“额外间接级别”的一种非常简单的方法。
关于java - 覆盖子类中的成员数据,在父类(super class)实现中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448956/