Java 具有固定值的对象

Java 具有固定值的对象,java,class,object,Java,Class,Object,我正在开发一个游戏。我有一个类武器和不同的子类,比如Shotgun,Mg。。。 现在我想拥有像AK47这样的特殊武器,30发子弹,10点dmg等等。 同样的事情也发生在高级轿车上。例如,兰博基尼的固定最大速度为300 km/h,而Seat leon的固定最大速度为200 km/h,但仍然是一辆汽车(或子类?)。 我该怎么做?兰博基尼是在构造函数中具有固定值的car的子类吗?我应该在car类或文件中为每辆车的值设置常量吗? 希望我足够清楚。 谢谢 编辑: 我想我还不够清楚。我需要“保存”汽车的默认

我正在开发一个游戏。我有一个类武器和不同的子类,比如
Shotgun
Mg
。。。 现在我想拥有像AK47这样的特殊武器,30发子弹,10点dmg等等。 同样的事情也发生在高级轿车上。例如,兰博基尼的固定最大速度为300 km/h,而Seat leon的固定最大速度为200 km/h,但仍然是一辆汽车(或子类?)。 我该怎么做?兰博基尼是在构造函数中具有固定值的car的子类吗?我应该在car类或文件中为每辆车的值设置常量吗? 希望我足够清楚。 谢谢

编辑: 我想我还不够清楚。我需要“保存”汽车的默认值(兰博基尼:最大速度300…),这样在游戏中玩家就可以拥有那个辆兰博基尼,并且它的最大速度总是300。带有子类的选项现在消失了,因为兰博基尼只是car的一个实例。所以我现在的问题是:在文件中还是作为类car中的静态常量? 例如:

public class car  {
   public static final int SPEED_LAMBORGHINI = 300

   // rest of class car
}

我认为一个文件的设计会更好,但是从一个文件中加载所有需要的武器不是需要很长时间吗?

有一个抽象类
Car
,它调用自己的抽象方法
getTopSpeed()
,它被子类
Lamborghini
Seat Leon
覆盖和实现


这意味着您可以从任何方法或集合中获得一辆
汽车
,并访问它的最高速度,甚至不知道它是什么类型的汽车。它叫做多态性。

有一个抽象类
Car
,它调用自己的抽象方法
getTopSpeed()
,该方法由子类
Lamborghini
Seat Leon
重写和实现


这意味着您可以从任何方法或集合中获得一辆
汽车
,并访问它的最高速度,甚至不知道它是什么类型的汽车。它被称为多态性。

每种汽车类型都可以是类
car
中的一个实例,其字段如
carName
topSpeed
等可针对每种特定类型进行设置。从概念上讲,兰博基尼或其他汽车没有任何与其他汽车有太大区别的属性,因此不同的汽车没有必要成为
car
的子类。您可以通过
Car
构造函数和/或setter方法设置不同的字段,例如
setTopSpeed()
setName()
或其他任何方法。

每种车型都可以是类
Car
的一个实例,具有
carName
topSpeed
等字段,可针对每种特定类型进行设置。从概念上讲,兰博基尼或其他汽车没有任何与其他汽车有太大区别的属性,因此不同的汽车没有必要成为
car
的子类。您可以通过
Car
构造函数和/或setter方法设置不同的字段,例如
setTopSpeed()
setName()
或其他任何方法。

通常,兰博基尼是一个
Car
带有
名称的
字段,其类型为
字符串
,值为“兰博基尼”以及类型为
int
和值为
300
maxSpeed
字段

我想剩下的就显而易见了

本质上-对对象的不同
形式使用不同的类。您很少需要每个对象都有不同的类

一辆德洛林可能是一辆
汽车
,但一辆时间旅行的德洛林可能是另一种类型

但是-由于
enum
s现在可用,您可能希望考虑:

enum Car {
    Lamborghini(300),
    Seat(200);

    final int topSpeed;

    private Car(int topSpeed) {
        this.topSpeed = topSpeed;
    }
}
已添加

至于您关于在何处存储详细信息的查询,我会在代码中设置默认值,但允许每个对象从属性文件修改该值。
enum
在这里有很大的帮助,因为您可以放置如下内容:

TopSpeed.Lamborghini=286
class Player {
  Car vehicle = Lamborghini;
  ...
在属性文件中,获取
enum
以自动调整它

已添加

请记住,
enum
s意味着尽可能接近常数。不要尝试扩展它们或更改它们的属性(可能一开始只有一次例外)

要使用此表单,您需要以下内容:

TopSpeed.Lamborghini=286
class Player {
  Car vehicle = Lamborghini;
  ...
通常,兰博基尼是一辆
汽车
,其
名称
字段类型为
字符串
,值为“兰博基尼”,而
maxSpeed
字段类型为
int
300

我想剩下的就显而易见了

本质上-对对象的不同
形式使用不同的类。您很少需要每个对象都有不同的类

一辆德洛林可能是一辆
汽车
,但一辆时间旅行的德洛林可能是另一种类型

但是-由于
enum
s现在可用,您可能希望考虑:

enum Car {
    Lamborghini(300),
    Seat(200);

    final int topSpeed;

    private Car(int topSpeed) {
        this.topSpeed = topSpeed;
    }
}
已添加

至于您关于在何处存储详细信息的查询,我会在代码中设置默认值,但允许每个对象从属性文件修改该值。
enum
在这里有很大的帮助,因为您可以放置如下内容:

TopSpeed.Lamborghini=286
class Player {
  Car vehicle = Lamborghini;
  ...
在属性文件中,获取
enum
以自动调整它

已添加

请记住,
enum
s意味着尽可能接近常数。不要尝试扩展它们或更改它们的属性(可能一开始只有一次例外)

要使用此表单,您需要以下内容:

TopSpeed.Lamborghini=286
class Player {
  Car vehicle = Lamborghini;
  ...
在我的游戏中,我使用XML“profiles”来定义具体对象的属性。 它对我很有用,因为它允许游戏设计人员(不同的人)轻松更改这些值,而无需直接处理代码。此外,添加新型武器/汽车/也很容易。。。没有任何编程

但是你的方法也可以。这或多或少是常识和品味的问题。

在我的游戏中,我使用了定义具体对象属性的XML“配置文件”。 这是乌塞夫