店子类(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。
答
基本上,你不能。如果你的变量是Foo类型的,你只能使用Foo或Foo父母的函数。
解决方法:
传递杂志到阵列中,也将其存储在类型杂志的变量,并使用杂志功能
角色该产物杂志时指的是变量之前在致电
而不是magazineMethod()后,有一种适用于书籍和杂志的通用方法,其行为由子类重写。
第三个选项通常是最好的。
如果你的集合是'Product'类型,你为什么要调用'magazineMethod'? – user7
@ user7因为它是Magazine类的一个属性的getter,它不在Product或Book中。 – Tryphon