【发布时间】:2015-09-13 04:23:30
【问题描述】:
我被分配了 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 中的方法?我想我对多态性和数组的工作方式有误解。
【问题讨论】: