我有一个父类(super class)“车辆”及其子类“汽车”,如下所示。我想从子类 Car 的构造函数中初始化变量“wheels”。我无法通过 super() 调用设置变量,因为它依赖于对方法的调用。
在这里使用父类(super class)的 setter 方法安全吗? 如果不是,类之间关系的 OO 基础是否存在问题?
ps。尝试原谅笨拙的车辆/汽车/底盘示例,并假设构造函数外部的方法调用“findNumberOfWheels”是必要的。
车辆类别
public abstract class Vehicle {
private int wheels;
private Chassis chassis;
public Vehicle(Chassis chassis){
this.chassis = chassis;
}
public int getWheels() {
return wheels;
}
public void setWheels(int wheels) {
this.wheels = wheels;
}
public Chassis getChassis() {
return chassis;
}
public void setChassis(Chassis chassis) {
this.chassis = chassis;
}
}
汽车类别
public class Car extends Vehicle{
public Car(Chassis chassis) {
super(chassis);
setWheels(findNumberofWheels(chassis));
}
private int findNumberofWheels(Chassis chassis){
return chassis.getWheels();
}
}
最佳答案
如果您可以通过子类构造父类(super class),那么您绝对应该可以使用其 setter 。
我猜您的替代方案是将这些调用移至构造函数之外,并在每次实例化新的 Car
时调用 setWheels
?您绝对不想这样做,因为您会重复自己,并且您(或其他人)可能会忘记调用电话。您应该将尽可能多的初始化代码放入构造函数中。这样如果你需要改变它,你只需要改变一个地方。
您甚至可以将父类(super class)字段设置为 protected :
protected int wheels;
直接修改即可。但这取决于您自己的判断。
关于java - 我应该使用父类(super class)的 setter 从子类初始化其实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28801653/