java - 从抽象类层次结构中获取正确的字段?

标签 java arraylist abstract-class field hierarchy

我有一个抽象类 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/

相关文章:

java - 无法实例化 Activity ComponentInfo 无法实例化类

java - JAX-RS Jersey 读取内容类型为 "*"的实体

java - spark 2.0 - java.io.IOException : Cannot run program "jupyter": error=2, 没有这样的文件或目录

php - 批判处理 GET 和 POST 请求的抽象类?

java - 在 Swing 中使用 HTML 代码

java - 不能在 ArrayList 中使用对象的 toString() 方法

java - 删除数组中的元素,这些元素是 Java 中其他元素的子串

java - Collection.toArray() 方法,详细信息

c++ - 让编译器告诉哪些方法不具体而不是错误 'invalid new-expression of abstract class type'

来自抽象类的 Java 通用子实例