我正在尝试从存储在Map中的对象构造多个对象(GameObject就是我正在复制的东西)。但是我想要复制的类型是像Wall和Turret这样的GameObject的子类型。如果我在我的超类中声明了公共GameObject(GameObject go){}方法,并且在我的子类中定义了公共Turret(Turret t){},那么Map中的对象是否会使用子类构造函数?我知道这对于方法是正确的,只是不确定对象。我试过搜索,这对我来说似乎是一个非常基本的oop问题,但搜索是一件很难的事情,任何输入都会非常感激! :d
仅仅是我想要的一个简短例子。
Map<String, GameObject> equipment = new HashMap<String, GameObject>();
equipment.put("turret", new Turret(x, y));//turret extends PlaceableGameObject which extends GameObject
if(user clicks){
GameObect tempObject = new Turret(equipment.get("turret"));
tempObject.setX(click.getX());
tempObject.setY(click.getY());
board.put(tempObject);
}
答案 0 :(得分:2)
您是否在问:如果Turret扩展了GameObject,并且您制作了一个Turret,GameObject的构造函数中的代码是否被称为?
是的,如果构造函数在两种情况下都被定义,那么它们也将被调用?
Turret
构造函数会隐式调用GameObject
构造函数。
“您可以编写一个子类构造函数,可以隐式地或使用关键字super来调用超类的构造函数。”
答案 1 :(得分:-1)
我最终做的对我有用的是在我的超类和我的所有子类中编写一个getNew(int x,int y)方法。这返回了正确的对象。