超类/子类构造函数用法

时间:2012-12-28 06:30:21

标签: java oop constructor

我正在尝试从存储在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);
}

2 个答案:

答案 0 :(得分:2)

  

您是否在问:如果Turret扩展了GameObject,并且您制作了一个Turret,GameObject的构造函数中的代码是否被称为?

     

是的,如果构造函数在两种情况下都被定义,那么它们也将被调用?

Turret构造函数会隐式调用GameObject构造函数。

来自Inheritance Tutorial

“您可以编写一个子类构造函数,可以隐式地或使用关键字super来调用超类的构造函数。”

答案 1 :(得分:-1)

我最终做的对我有用的是在我的超类和我的所有子类中编写一个getNew(int x,int y)方法。这返回了正确的对象。