我是OOP的新手,我正在尝试使用HAS-A关系同时创建两个对象。我有一个Box对象,里面有一个Contents对象,我正在努力解决构造函数应如何处理它的问题。我的研究主要是在单个类中挖掘构造函数链的内容。 contents对象还从枚举中选择一个ContentsType:
盒:
public class Box {
double volume;
Contents contents;
public Box(int inputVolume, String inputContInfo, ContentsType inputContType){
this.volume = inputVolume;
contents = new Contents(inputContInfo, inputContType);
}
}
内容:
class Contents {
ContentsType contType;
String contInfo;
Contents(String inputContInfo, ContentsType inputContType){
this.contInfo = inputContInfo;
this.contType = inputContType;
}
}
ContentsType:
public enum ContentsType {
CARGO,
GIFT,
OTHER;
}
上面的Box构造函数可以工作,但是这会破坏类的封装吗?这似乎不对,我想找到接受这种方法的方法。任何建议将不胜感激!
编辑: 我只是想从它的构造函数创建一个框,例如:
Box aBox = new Box(2, "Something", ContentsType.CARGO);
答案 0 :(得分:2)
不,它没有打破类的封装。这可以是结构设计模式的一个示例,您可以在其中更改类的性质,而无需将类的实现暴露给客户端。
答案 1 :(得分:1)
确保您将字段设为私有 - 因为您不希望任何人直接修改这些值。除此之外,您的代码看起来很好。
答案 2 :(得分:0)
我不明白这段代码是如何打破封装的。由于您的研究是构造函数链接,因此这段代码非常好。否则我建议单独创建Box和Contents,并在Box类中提供一个Contents setter。