以下是我的难题的玩具示例:
public abstract class Car {
public Car(Seat[] seatsParam) { // Could be protected.
driverSeat = new DriverSeat();
seats = new ArrayList<Seat>();
seats.add(driverSeat);
seats.addAll(seatsParam);
}
private final List<Seat> seats;
private final DriverSeat driverSeat;
}
public class MyCar extends Car {
public MyCar() {
super(new Seat[]{new PassengerSeat()}); // Cannot assign to member.
}
public PassengerSeat getPassengerSeat() { // Would like this accessor.
return passengerSeat;
}
private final PassengerSeat passengerSeat;
}
Car有一个Seat(座位超类型)列表,最好在构造函数中初始化。每辆车都有一个DriverSeat。 MyCar还有一个PassengerSeat,我想从子类型访问,也可以从父列表(作为席位)访问。
我击落的一些事情:
我想说这是我应该能够在OO中表达的内容,定义一个变量并将其传递给父引用。但我想不出怎么做得很好。自从我使用C ++以来已经有一段时间了,但这是初始化列表解决的问题吗?如果是这样,Java是否具有等价物?
答案 0 :(得分:2)
我见过有类似问题的人使用线程局部变量,上帝知道其他可怕的技巧,幸运的是有一个简单的解决方案:
public MyCar() {
this(new PassengerSeat());
}
private MyCar(PassengerSeat seat) {
super(new PassengerSeat[]{seat});
// Well do something with your seat now.
}