Java如何处理一种对象

时间:2015-08-14 20:25:22

标签: java class oop object

我正在设计一个管理项目的软件。

该软件有多种产品类型 - 每种产品都有自己的SKU和物理属性,用户可以动态添加这些产品类型。

该软件还有项目(也动态添加) - 每个项目属于产品类型(继承其特定属性)。当用户添加他们需要能够选择产品类型的项目时,用户还可以添加其他属性,例如项目是否已损坏,打开或新建及其他属性。

在我目前的设计中,我有一个ProductType类,其中包含产品类型所有属性的字段。我还有一个item类,其中包含其他属性的字段。

我对如何让类Item的对象继承类productType的特定对象的属性感到困惑。任何意见,将不胜感激。该设计是第一次修订,因此可以很容易地进行更改。

我的第一个想法是全局存储ProductType数组,然后在创建项目时使用函数来复制字段。这有用还是有更好的方法?

3 个答案:

答案 0 :(得分:2)

我认为您问题的最佳解决方案是使用合成:类型是Item的属性。

public class Item () {
    private final ProductType type;
    // other properties

    public Item(ProductType type) {
        this.type = type;
    }
}

答案 1 :(得分:0)

public class Item extends ProductType{}

答案 2 :(得分:0)

您不应复制字段,而应引用ProductType。您也不应该直接访问ProductType的字段,而只能通过getter方法访问,如果您想继续"继承"在这些字段中,您应该将授权方法添加到Item类。

public class ProductType {
    private String typeName;
    public ProductType(String typeName) {
        this.typeName = typeName;
    }
    public String getTypeName() {
        return this.typeName;
    }
}

public class Item {
    private ProductType productType;
    private String      itemName;
    public Item(ProductType productType, String itemName) {
        this.productType = productType;
        this.itemName = itemName;
    }
    // Access to ProductType object (optional)
    public ProductType getProductType() {
        return this.productType;
    }
    // Delegated access to ProductType field
    public String getTypeName() {
        return this.productType.getTypeName();
    }
    // Access to Item field
    public String getItemName() {
        return this.itemName;
    }
}