我目前正在制作一个简单的网上商店应用程序。网上商店需要将三种物品添加到购物车中。 CD,书或游戏。我为每个都有toString()
方法的对象创建了一个类。
现在我必须创建一个方法add(..)
,它需要将指定的对象添加到名为shoppingcart的ArrayList中。需要在Webshop类中调用此方法,该类本身具有创建的对象。
我知道如何使用多个添加方法执行此操作,但需要使用单个方法执行此操作。
答案 0 :(得分:4)
您可能希望创建一个名为AbstractItem
的新类型,并且所有其他类型都会从此扩展。将这个抽象类隐藏在接口后面也是一种很好的做法。因此,AbstraxtItem
类可以实现一个定义公共API的Item接口。
AbstractItem
类将定义其子类型应实现的一些抽象方法,如getPrice()
,以及可能是所有子类的常见行为的其他具体方法。购物车将是ArrayList<Item>
,将由add(Item)
方法填充。
答案 1 :(得分:3)
您商店中可以添加的每个对象都应实现interface IProduct.
然后,您有一个IP产品列表,您可以添加。
ArrayList<IProduct> shoppingBasket = new ArrayList<IProduct>();
答案 2 :(得分:1)
你可以让课程CD,书籍和游戏实现Interface,例如ShopObject
。
然后你可以让你的shoppinCart像这样:
ArrayList<ShopObject> shoppingCart = new ArrayList<ShopObject>();
答案 3 :(得分:1)
OOP 可以帮助您解决此问题:
如果您发现CD, Book or Game
有一些常见的属性,那么您可以使用具有共同功能的Base类,并让所有这些扩展该类。
因此,CD, Book and Game
扩展了一个类产品,并提供了一个以Product
为参数的通用添加方法。
添加(产品);
如果CD, Book and Game
不共享任何常见功能,那么您也可以使用OOP功能以更简单的方式添加所有这些功能;但在这里你需要使用方法重载
添加(CD cd);
添加(图书);
因此建议,考虑一下您的应用程序设计,然后调用其中一种方法。
答案 4 :(得分:0)
您可以使用判别式聚合所有对象,以指示哪个对象真正被表示,就像Ada中的变体记录或C中的联合一样。
您在此处有一个完整的示例:http://lambda-the-ultimate.org/node/2694#comment-40453