我目前正在制作一个简单的网上商店应用程序。网店需要将三种物品添加到购物车中。一张CD、一本书或一个游戏。我为每个都有toString()
方法的对象创建了一个类。
现在我必须创建一个方法,该方法add(..)
需要将指定的对象添加到名为 shoppingcart 的 ArrayList 中。此方法需要在 Webshop 类中调用,该类本身具有已创建的对象。
我知道如何使用多种添加方法来做到这一点,但需要使用一种方法来做到这一点。
您可能想要创建一个名为 like 的新类型AbstractItem
,并且您的所有其他类型都从该类型扩展而来。将这个抽象类隐藏在接口后面也是一个好习惯。因此,AbstraxtItem
该类可以实现定义公共 API 的 Item 接口。
该类AbstractItem
将定义其子类型应实现的一些抽象方法,getPrice()
以及可能是所有子类的共同行为的其他具体方法。购物车将是一个ArrayList<Item>
并且将由该add(Item)
方法填充。
您商店中可以添加的每个对象都应该实现一个interface IProduct.
您然后有一个 IProduct 列表,您可以添加该列表。
ArrayList<IProduct> shoppingBasket = new ArrayList<IProduct>();
OOP can help you solve this problem :
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);
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.
您可以让 CD、Book 和 Game 类实现一个接口,例如ShopObject
. 然后你可以像这样拥有你的shoppinCart:
ArrayList<ShopObject> shoppingCart = new ArrayList<ShopObject>();
您可以使用判别式聚合所有对象来指示哪个对象真正被表示,就像 Ada 中的变体记录或 C 中的联合一样。
你在这里有一个完整的例子:http: //lambda-the-ultimate.org/node/2694#comment-40453