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“配置文件”。
这是乌塞夫