Java——在子类中初始化父类(super class)变量?

标签 java variables subclass superclass

好的,例如,假设我有一个名为“Vehicle”的抽象类。 Vehicle 类有一个名为 wheels 的静态变量,它没有被初始化。我想要做的是从 Vehicle 类扩展其他子类,如“摩托车”和“卡车”,并在这些子类中初始化车轮。

代码:

public abstract class Vehicle {
    static int wheels; //number of wheels on the vehicle
}

但以下不起作用:

public class Motorcycle extends Vehicle {
    wheels = 2;
}

有没有办法有效地做到这一点?

编辑: 感谢到目前为止所有回复的人。我知道创建实例可能是比将它们全部放在单独的类中更好的方法,但是我没有完全理解 java 的“静态”部分,所以我在这里需要一点帮助。

我想为我的程序做的是为摩托车和卡车类提供单独的 Sprite ,我希望它们是静态的,这样我就不必在每次创建一个实例时都重新加载图像摩托车或卡车。但除此之外,它们彼此具有几乎相同的属性,这就是它们都从 Vehicle 父类(super class)扩展的原因。

我能看到的唯一其他方法是不在 Vehicle 类中声明 sprite 变量,而是在 Motorcycle/Truck 类中声明,如下所示:

public abstract class Vehicle {
//Other coding
}

public class Motorcycle extends Vehicle {
static BufferedImage sprite = //initialize image
//Other coding
}

public class Truck extends Vehicle {
static BufferedImage sprite = //initialize image
//Other coding
}

最佳答案

如果'wheels' 是静态的,则只有一个,它将同时应用于所有车辆。因此,三轮车、摩托车、18 轮卡车和福特汽车的车轮数量都相同。

这对我来说没有意义。最好让“wheels”成为父类中的实例变量,但每个子类都适当设置。

不过你可以试试

Vehicle.wheels = 2;

注意:自从您添加到您的问题后,我正在添加我的答案。

我喜欢你在每个子类中都有静态的想法。但是您应该将它们设为私有(private)。然后在父类(Vehicle)中放一个抽象方法,如

public abstract BufferedImage getSprite();

然后每个直接子类都必须有相同的方法并且它可以返回私有(private)静态变量。

将变量设为静态,这样您只需加载它们一次。将它们设为私有(private),这样类本身之外的代码就无法欺骗它并引入错误。如果可能的话,您可以将它们设为“最终版”,这样类中的代码本身就无法在事后更改它并引入错误。 (“final”变量不能更改其值,但其值的内容可以更改。因此“final”并不像它应该的那样美妙。)

关于Java——在子类中初始化父类(super class)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076730/

相关文章:

java - 在Andengine中创建物理体时出现奇怪的错误

java - 将字符串放入带有单个字符的数组列表Java

java - 如何使原始点指向引用?

bash - 在 Bash 中使用变量作为函数参数

php - 这段php代码是什么意思

ios - 子类化 NSInputStream,重写委托(delegate)?

python - 子类避免父类的元类

java - 当Json数据输入postman而不使用java play框架中的数据库时如何增加id值?任何人都可以帮助如何生成 id 值

java - 这样解释变量声明

python - PyTorch 数据集类的子类找不到数据集文件