【问题标题】:Get the right field from an abstract class hierarchy?从抽象类层次结构中获取正确的字段?
【发布时间】:2013-05-14 22:15:50
【问题描述】:

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

【问题讨论】:

    标签: java arraylist abstract-class field hierarchy


    【解决方案1】:

    如果您不在扩展类上覆盖 getX(),您将从 A 获得 x。

    如果您覆盖 getX(),您将获得 overrides 方法返回的值。

    示例:

    A a = new B(); a.getX();
    B b = new B(); b.getX();
    

    以上所有行都将返回被 B 类覆盖的 getX() 的值。

    如果此方法没有在 B 类上被覆盖,那么您将获得在 A 类上定义的值。

    【讨论】:

    • 所以我必须为每个类写getX()?有没有办法只写一次?
    • 如果你不覆盖 Class B 的 getX() 那么你会得到 Class A 的 getX() 定义的值。
    • 好的,谢谢。既然你第一个回答,我会奖励你最佳答案
    • “我会得到 B 的 X 值还是得到 A 的值”我觉得这是一个非常误导性的陈述。只有一个 x 并且它存在于 B 类(毕竟 A 类永远无法实例化)。您真正的意思是您会在 A 类中获得 getX() 还是在 B 类中获得 getX() 的结果。如前所述,除非该方法被覆盖,否则只有一个 getX 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多