【问题标题】:Store subclass in an array of superclasses and use methods of subclass (Java)将子类存储在超类数组中并使用子类的方法(Java)
【发布时间】:2017-08-30 01:42:38
【问题描述】:

我的问题如下:

我有一个名为 Product 的抽象类和 2 个以上的名为 Book 和 Magazine 的子类。 Magazine 有 1 个额外的方法在 Product 或 Book 中找不到。

到目前为止一切顺利。但我想将这些不同的产品存储在 1 个数组中,如下所示:

List<Product> products = new ArrayList<>(); products.add(new Book()); products.add(new Magazine());

还是没有问题吧?但是此时我也想这样做(索引 1 是杂志):

products.get(1).magazineMethod()

这就是一切都平淡无奇的地方。我知道 instanceof 以及这将如何解决我的问题。然而,在谷歌搜索和查看 stackoverflow 时,似乎在这个问题上使用 instanceof 是不好的。对于每个不同的 Product 子类,我都必须使用 instanceof 添加另一个检查。我问过我的老师,他不能给我正确的答案,并告诉我他会检查一下。

我知道多态性是如何工作的,如果产品也有杂志方法()它会工作。但这没有任何意义,因为产品不是杂志,这样做会破坏继承的全部意义。

是的,这是家庭作业的一部分,但我心中的问题是如此根本,以至于我想要一个适当的解决方案而不是一些解决方法/hackjob。

【问题讨论】:

  • 如果您的收藏是Product 类型,您为什么要调用magazineMethod
  • @user7 因为它是 Magazine 类的属性的 getter,它不在 Product 或 Book 中。

标签: java inheritance polymorphism subclass superclass


【解决方案1】:

从根本上说,你不能。如果你的变量是 Foo 类型的,你只能在 Foo 或 Foo 的父级上使用函数。

解决方法:

  • 在将杂志传递给数组之前,还要将其存储在杂志类型的变量中,并在使用杂志函数时引用该变量

  • 在致电之前将产品投放到杂志

  • 拥有一个适用于书籍和杂志的通用方法,而不是 magazineMethod(),其行为被子类覆盖。

第三个选项通常是最好的。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多