【问题标题】:Accessing subclass methods within a vector of of superclass objects访问超类对象向量中的子类方法
【发布时间】:2015-03-20 17:51:58
【问题描述】:

我正在使用向量来存储抽象超类的对象。我需要访问向量中每个对象的派生子类中的方法。我将使用instanceof 来区分每个对象属于哪个子类。

我没有写抽象类的权限。

目前我得到的编译错误是:

Error: cannot find symbol symbol: method <mySubclassMethod>() location: class <MyAbstractClass>

访问向量中每个对象的子类方法最有效的方法是什么?

【问题讨论】:

  • 如果您可以发布您尝试过的代码,可能很容易提供最佳解决方案。
  • 您尝试通过添加 instanceOf 检查并调用仅存在于每个子类中的不同方法来尝试调用集合中对象上的方法的方式存在一个根本缺陷。在我看来,你可以发布另一个问题,要求一个好的设计来解决你的问题,然后完全放弃这个问题,因为即使你设法得到了这个问题的答案,它也不是一个好的编码方式。

标签: java object inheritance vector abstract-class


【解决方案1】:

您需要将对象强制转换为 instanceof 守卫内的子类。

if (obj instanceof MySubclass)
    ((MySubclass)obj).mySubclassMethod();

更广泛地说,如果该方法应该在您的所有子类中都可用,您应该将它添加到抽象超类中。然后,当您在“未转换的”抽象超类对象上调用该方法时,它将使用正确子类中的实现。

public abstract class MySuperclass {
    public abstract void mySubclassMethod();
    ...
}

public class MySubclass extends MySuperclass {
    @Override
    public void mySublcassMethod() { ... }
    ...
}
...

MySuperclass obj = [actually a Subclass];
obj.mySubclassMethod(); // uses the implementation from MySubclass

【讨论】:

    【解决方案2】:

    我认为您想要做的是在您的超类中创建抽象方法。然后,你要做的是在你的每个子类中重写这个方法。这将允许您访问该向量中所有不同对象的该方法。

    我假设此方法会因您的子类而异,否则,您为什么不首先在超类中编写该方法。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 2016-01-16
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2019-06-10
      • 2015-05-24
      相关资源
      最近更新 更多