我知道在父类中拥有受保护的变量是不好的设计,因为所有子类都可以更改该值。但是,我试图测试它,但我在这里做错了。它告诉我在Truck类中找不到符号speed = 999999;
。我认为子类可以访问父类中的受保护变量speed
。
public class Vehicle {
protected double speed;
protected double maxSpeed;
public Vehicle(double speed, double maxSpeedIn) throws InvalidDataException{
setSpeed(speed);
maxSpeed = maxSpeedIn;
}
public void setSpeed(double s) throws InvalidDataException {
if (s < 0.0) {
throw new InvalidDataException("Negative speed is not valid" );
}
if (s > maxSpeed) {
throw new InvalidDataException("Speed cannot exceed maximum spped:");
}
speed = s;
}
}
public class Truck extends Vehicle {
public Truck(double speedin, double maxSpeedin) throws InvalidDataException {
super(speedin,maxSpeedin);
}
speed = 999999;
}
答案 0 :(得分:2)
您的 speed = 99999; 行无法按照您将其放入 Truck 类的方式生效。试着把它放在其他地方。
例如,在调用 super 之后,您可以将其放在 Truck 的构造函数中。
请注意,如果您选择了另一个名称altogher,则会遇到完全相同的错误,如下所示:
public Truck extends Vehicle {
public Truck(double speedin, double maxSpeedin) throws InvalidDataException {
super(speedin,maxSpeedin);
}
justTesting = 999999;
}
答案 1 :(得分:2)
在Java中,您不能简单地在类的中间编写指令(如speed = 999999;
)。必须在方法(函数)中写入指令。你究竟是什么意思?你什么时候想要执行这个指令?
顺便说一下,当setSpeed
构造函数Vehicle
调用maxSpeed
时尚未初始化,当您尝试比较s
和{时,这会导致错误{1}}。
答案 2 :(得分:1)
您正在尝试访问方法体外部的变量,它需要位于子类的构造函数或方法中,以便您以所需的方式访问它。
答案 3 :(得分:1)
在我看来,受保护的变量不一定是坏事。在某些情况下,它确实是必要的。但这取决于当然的设计:)
在这种情况下,我认为这很有道理。您应该能够更改Truck类中的speed
值。这里的问题是(可能)行speed = 999999;
没有放在类的方法中。我可能错了,但在我看来,Java会将其编译为与类无关的代码,因此无法找到速度变量。尝试将它放在构造函数中,看看会发生什么。