2

我目前正在制作一个简单的网上商店应用程序。网店需要将三种物品添加到购物车中。一张CD、一本书或一个游戏。我为每个都有toString()方法的对象创建了一个类。

现在我必须创建一个方法,该方法add(..)需要将指定的对象添加到名为 shoppingcart 的 ArrayList 中。此方法需要在 Webshop 类中调用,该类本身具有已创建的对象。

我知道如何使用多种添加方法来做到这一点,但需要使用一种方法来做到这一点。

4

5 回答 5

4

您可能想要创建一个名为 like 的新类型AbstractItem,并且您的所有其他类型都从该类型扩展而来。将这个抽象类隐藏在接口后面也是一个好习惯。因此,AbstraxtItem该类可以实现定义公共 API 的 Item 接口。

该类AbstractItem将定义其子类型应实现的一些抽象方法,getPrice()以及可能是所有子类的共同行为的其他具体方法。购物车将是一个ArrayList<Item>并且将由该add(Item)方法填充。

于 2013-02-12T12:06:03.877 回答
3

您商店中可以添加的每个对象都应该实现一个interface IProduct. 您然后有一个 IProduct 列表,您可以添加该列表。

ArrayList<IProduct> shoppingBasket = new ArrayList<IProduct>();
于 2013-02-12T12:06:48.803 回答
1

OOP can help you solve this problem :

  1. If you find CD, Book or Game has some common attribute then you can use a Base class with common features and let all these extend that class.

    So CD, Book and Game extends a class say Product and you provide a generic add method which takes Product as parameter.

    add(Product product);

  2. If CD, Book and Game don't share any common features then also you can use OOPs feature to add all these in more simpler way; but here you need to use method overloading

    add(CD cd);

    add(Book book);

So will suggest, think over your application design and then take a call on either of the approaches.

于 2013-02-12T12:35:41.037 回答
1

您可以让 CD、Book 和 Game 类实现一个接口,例如ShopObject. 然后你可以像这样拥有你的shoppinCart:

ArrayList<ShopObject> shoppingCart = new ArrayList<ShopObject>();
于 2013-02-12T12:08:11.983 回答
0

您可以使用判别式聚合所有对象来指示哪个对象真正被表示,就像 Ada 中的变体记录或 C 中的联合一样。

你在这里有一个完整的例子:http: //lambda-the-ultimate.org/node/2694#comment-40453

于 2013-02-12T12:07:10.093 回答