gpt4 book ai didi

java - 在 Java 中的多态数组对象上运行方法时出现问题

转载 作者:行者123 更新时间:2023-11-30 08:09:19 24 4
gpt4 key购买 nike

我的作业有 2 个类:Sale 和 DiscountSale(扩展 Sale)。我应该创建一个名为 MultiItemSale 的新类,它将创建一个包含 Sale 和 DiscountSale 对象的数组(购物车)。但是我无法从 DiscountSale 获取方法来处理数组中的 DiscountSale 对象。

Sale 类(基类)有一些方法,特别是 setName() 和 setPrice()。

DiscountSale 类扩展了 Sale,因此它可以使用 setName() 和 setPrice(),但除其他外,它还有 setDiscount()。

在 MultiItemSale 中:

Sale[] shoppingCart = new Sale[numOfItems];

据我了解,由于 DiscountSale 扩展了 Sale,因此 Sale 和 Discount Sale 对象都应该能够放置在这个数组中,对吗?

我使用 for 循环来询问商品是否打折。如果不是,则:

shoppingCart[i] = new Sale();

如果打折:

shoppingCart[i] = new DiscountSale();

这就是我开始遇到问题的地方:

以下有效,因为 setName() 和 setPrice() 来自 Sale 类

此外,这一切都在一个 if 语句下,该语句表示如果商品打折,则:

shoppingCart[i] = new DiscountSale();
shoppingCart[i].setName(name);
shoppingCart[i].setPrice(price);

但是如果我尝试这样做,我会得到错误,因为 setDiscount() 来自 DiscountSale:

shoppingCart[i].setDiscount(discount);

Eclipse 告诉我,“方法 setDiscount(double) 未为 Sale 类型定义”。如果

shoppingCart[i] = new DiscountSale();

为什么我不能在该对象上使用 DiscountSale 中的方法?我想我对多态性和数组的工作原理有误解。

最佳答案

编译器只知道您有 Sale,因此您只能使用这些方法。多态性适用于当您对不同类型的对象进行相同函数调用并且相同函数调用的行为会因对象类型不同而不同的情况。

在此示例中,名称、价格和折扣可以作为构造函数的参数。这样你就可以在说 new 时传递它们,之后你就不必调用设置方法了。

编辑:查看the Wikipedia article on the Circle-Ellipse Problem ,我突然想到任何 Sale 都有 0% 的隐含折扣。您可以仅使用 DiscountSale 并能够访问其所有成员,也许包括一个指示折扣是否可以更改的标志。

关于java - 在 Java 中的多态数组对象上运行方法时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32546277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com