店子类(JAVA)

问题描述:

我的问题是如下:店子类(JAVA)

我有一个抽象类,称为产品和2+子类称为书和杂志。杂志有一种额外的方法,在产品或书籍中找不到。

到目前为止这么好。但我想在1阵列中存储这些不同的产品,像这样:

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

还是没有问题吧?然而,在这一点上,我也想这样做(指数1为杂志):

products.get(1).magazineMethod()

而这正是一切放平。我知道instanceof以及如何解决我的问题。然而,在谷歌搜索和看在stackoverflow似乎在这个问题上使用instanceof是不好的。对于每个不同的产品子类,我都必须使用instanceof添加另一个检查。我问我的老师这件事,他不能给我一个正确的答案,并告诉我他会检查出来。

我知道多态性是如何工作的,如果产品也有magazineMethod(),它会起作用。但这是没有意义的,因为产品不是杂志,这样做会打败整个继承点。

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

+0

如果你的集合是'Product'类型,你为什么要调用'magazineMethod'? – user7

+0

@ user7因为它是Magazine类的一个属性的getter,它不在Product或Book中。 – Tryphon

基本上,你不能。如果你的变量是Foo类型的,你只能使用Foo或Foo父母的函数。

解决方法:

  • 传递杂志到阵列中,也将其存储在类型杂志的变量,并使用杂志功能

  • 角色该产物杂志时指的是变量之前在致电

  • 而不是magazineMethod()后,有一种适用于书籍和杂志的通用方法,其行为由子类重写。

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