我有一个抽象类 A
public abstract class A{
private int x;
public void doSomethingToX{...};
public int getX(){
return x;
}
我有 7 个扩展 A 的类,这 7 个类中的每一个都以相同的方式实现 doSomethingToX,所以我在类 A 中定义它。如果类 B 扩展 A,我调用 B.doSomethingToX(),然后调用 B .getX(),我会得到 B 的 X 值还是 A 的值?
在我的真实程序中,我有一个 A 对象的 ArrayList
ArrayList<A> list;
我打电话:
list.add(new B());
list.get(index).doSomethingToX();
list.get(index).getX();
我会得到 A 的 x 还是 B 的结果?
最佳答案
如果您不在扩展类上重写 getX(),您将从 A 中获得 x。
如果您重写 getX(),您将获得重写方法返回的值。
示例:
A a = new B(); a.getX();
B b = new B(); b.getX();
以上所有行都将返回在 B 类上重写的 getX() 的值。
如果 B 类上没有重写此方法,那么您将获得 A 类上定义的值。
关于java - 从抽象类层次结构中获取正确的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553737/