如果我想获取 StoreInventory 类及其属性并在新类中使用这些属性,我如何将 StoreInventory 包含在我的新类 Snacks 中?
5 回答
你说:
如果我想获取 StoreInventory 类及其属性并在新类中使用这些属性,我如何将 StoreInventory 包含在我的新类 Snacks 中?
你的逻辑对我来说并不正确。难道不是反过来——StoreInventory 应该保存 Snack 对象而不是保存 StoreInventory 对象的 Snack 对象吗?
请注意,无论您做什么,无论人们建议什么,继承都不是您想要的解决方案。使用组合,您的 StoreInventory 对象可能应该包含一个 Snack 数组或一个集合,例如 Snack 的数组列表 -- ArrayList<Snack>
。
例如,
public class StoreInventory {
private List<Snack> snackList = new ArrayList<Snack>();
// ... etc...
public void addSnack(Snack snack) {
snackList.add(snack);
}
}
两种标准方式:
聚合:您
StoreInventory
的类定义中有一个数据成员并使用它。例如:class Snacks { private StoreInventory inventory; Snacks() { this.inventory = new StoreInventory(); } }
继承:你派生自
StoreInventory
,例如:class Snacks extends StoreInventory { Snacks() { super(); // <== Initialize the base class } }
请注意,
super();
如果没有参数,则调用不必是显式的;如果你忽略它,编译器会为你添加它。但是,如果StoreInventory
需要构造参数,这就是您提供它们的方式。
现在您有了术语,您应该可以轻松找到这两个概念的教程。
您可以使用任一继承
class Snacks extends StoreInventory
或作文(在你的情况下很可能是这个):
class Snacks {
private final StoreInventory storeInventory = new StoreInventory();
}
虽然没有更多信息,很难说哪个会更好,但这基本上是你的两个选择。
您可以extend
选择StoreInventory
该类,也可以将其作为一个字段包含在新类中。
这些技术分别称为继承和组合。
看到这个:http ://www.artima.com/objectsandjava/webuscript/CompoInherit1.html
你可以
- 子类它例如
class MyClass extends StoreInventory
或者更好的选择是使用委托,例如
private final StoreInventory inventory = ....