例如,我有一个Car
类。当我创建一个汽车对象时,我希望传递我希望该汽车拥有的车轮数量,构造函数将从我传递给Car
的构造函数的1-x
车轮对象数量中创建Wheel
对象。
如果您能提供任何帮助,我们将不胜感激!
父级为Car
子级为Wheel
汽车与其车轮的关系是具有关系。汽车有轮子。通过继承建模在语义上是不正确的,因为继承是是关系。汽车不是车轮具有关系必须通过组合建模。汽车有多个轮子。使用一个像数组一样的集合来固定每辆车的车轮:
class Wheel {
}
class Car {
// Use an array to hold the wheel objects
private Wheel[] wheels;
private String name;
public Car(String name, int wheelCount) {
this.name = name;
wheels = new Wheel[wheelCount];
for(int i = 0; i < wheelCount; i++) {
wheels[i] = new Wheel();
}
}
public void changeWheelAt(int index, Wheel wheel) {
wheels[index] = wheel;
}
public Wheel getWheelAt(int index) {
return wheels[index];
}
public Wheel[] getWheels() {
return wheels;
}
public String getCarName() {
return name;
}
public int getNumberOfWheels() {
return wheels.length;
}
}
我希望你并不是说Car类是Wheel的父类。这将是一种IS-A关系。我们确实知道一个轮子是IS-NOT-a汽车。
我们可能想在这里使用的是车轮和汽车之间的多对一合成(HAS-A(关系<大多数汽车都有轮子>大多数汽车都有轮子>
所以类似于:-
public class Car {
...
Set<Wheel> wheels;
}
然后,您可以有一个构造函数,在其中您可以传递轮子的数量,并且集合将被初始化。
public class Car {
Car(int numOfWheels) {
wheels = new HashSet<>();
for(int i=0; i<numOfWheels; i++) {
wheels.add(new Wheel());
... // Other Wheel properties
}
}
...
Set<Wheel> wheels;
}