Java 如何正确地继承类和构造程序?
我在为一个项目写东西。我有各种各样的世界物体(游戏中的真实物体——如矿石、树木等),它们都有各自的区域。铜矿石有一个区域列表,而铁矿石有另一个区域列表 有一段时间,我把矿石、树木等分类。然而,我意识到它们共享很多功能,本质上都是世界对象 例如,我可以查找最接近玩家级别的矿石或树木。我可能会查找离我最近的铜矿,或是离我最近的橡树 在每个单独的类中,我都有一个函数来完成这些事情。我意识到我根本没有利用OOP 我的问题是:你将如何设计和构造这样的东西 是否存在其他类从中扩展的WorldObject类 区域由我静态定义。如何将区域附加到矿石类中的对象铜?我会使用一个单独的LookUpTable类来存储信息吗?area会是它自己的类吗?WorldObject类会继承它吗Java 如何正确地继承类和构造程序?,java,oop,Java,Oop,我在为一个项目写东西。我有各种各样的世界物体(游戏中的真实物体——如矿石、树木等),它们都有各自的区域。铜矿石有一个区域列表,而铁矿石有另一个区域列表 有一段时间,我把矿石、树木等分类。然而,我意识到它们共享很多功能,本质上都是世界对象 例如,我可以查找最接近玩家级别的矿石或树木。我可能会查找离我最近的铜矿,或是离我最近的橡树 在每个单独的类中,我都有一个函数来完成这些事情。我意识到我根本没有利用OOP 我的问题是:你将如何设计和构造这样的东西 是否存在其他类从中扩展的WorldObject类
我只是不明白如何在这个场景中应用OOP的原则,特别是作为一个新手。谢谢。回答您的每个问题:
世界对象
,然后通过对象类进行扩展:
public abstract class WorldObject { // Superclass
// Private methods common to all world objects
private int posx;
private int posy;
// Public methods common to all world objects
public double distance(int x, int y);
}
public class Tree extends WorldObject {
// Inherited Methods
}
public class Ore extends WorldObject {
// Inherited Methods
}
public class Position {
private int x;
private int y;
private int z; // if needed
// Contructor, getters and setters
}
4A。铜矿石
如果“铜矿石”与其他“矿石”相比具有“特殊”属性,则将其创建为从WorldObject或Ore类扩展而来的新类。如果只是具有不同的属性,则将这些属性添加到Ore类:
public class Ore extends WorldObject {
private String type; // which may be "Copper", "Iron", etc.
private double weight; // ....etc.
// Inherited Methods
}
4B。如何将区域附加到矿石类中的对象铜?我会使用一个单独的LookUpTable类来存储信息吗
使用世界对象列表,其中每个对象都有一个位置:
public List<WorldObject> objects = new ArrayList<>();
public List objects=new ArrayList();
你不需要在你的案件中使用地图。映射通常在ID和对象关系中很有用,在这些关系中,您可以连续排序并快速找到所需的对象
同样,我需要更多关于什么是“面积”的信息。不过,如果它只是位置,您可以将其作为字段包含在
WorldObject
中,如果我是您,我不会选择继承,因为它可能会在以后给您带来一些限制。例如,在java中不能有多个父对象,如果您想扩展另一个类,您会怎么做
然而,在这种情况下,您可以设计您的层次继承来解决这种情况,但这并不总是(轻松地)可行的
我的解决方案是:更喜欢接口而不是继承
。您可以定义world
接口,所有真实世界的对象都必须实现它