0

如果我想获取 StoreInventory 类及其属性并在新类中使用这些属性,我如何将 StoreInventory 包含在我的新类 Snacks 中?

4

5 回答 5

1

你说:

如果我想获取 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);
  }
}
于 2013-01-27T18:28:23.283 回答
0

两种标准方式:

  • 聚合:您StoreInventory的类定义中有一个数据成员并使用它。例如:

    class Snacks {
        private StoreInventory inventory;
    
        Snacks() {
            this.inventory = new StoreInventory();
        }
    }
    
  • 继承:你派生自StoreInventory,例如:

    class Snacks extends StoreInventory {
    
        Snacks() {
            super(); // <== Initialize the base class
        }
    }
    

    请注意,super();如果没有参数,则调用不必是显式的;如果你忽略它,编译器会为你添加它。但是,如果StoreInventory需要构造参数,这就是您提供它们的方式。

现在您有了术语,您应该可以轻松找到这两个概念的教程。

于 2013-01-27T18:25:57.523 回答
0

您可以使用任一继承

class Snacks extends StoreInventory

或作文(在你的情况下很可能是这个):

class Snacks {
    private final StoreInventory storeInventory = new StoreInventory();
}

虽然没有更多信息,很难说哪个会更好,但这基本上是你的两个选择。

于 2013-01-27T18:26:04.687 回答
0

您可以extend选择StoreInventory该类,也可以将其作为一个字段包含在新类中。

这些技术分别称为继承和组合。

看到这个:http ://www.artima.com/objectsandjava/webuscript/CompoInherit1.html

于 2013-01-27T18:26:05.480 回答
0

你可以

  • 子类它例如class MyClass extends StoreInventory
  • 或者更好的选择是使用委托,例如

    private final StoreInventory inventory = ....
    
于 2013-01-27T18:26:44.743 回答