我对接口有疑问。我有一个接口,它具有一个名为GameWorld的类的所有方法。 GameWorld拥有一个名为GameObject的类,可以是坦克,岩石,导弹等。
public interface IGameWorld
{
public Point getLocation(); // GameObject
public Color getColor();
public void setLocation(Point newCoord);
public void setColor(Color newColor);
}
我想在GameWorld的GameObject类中实现IGameWorld中的方法。像这样的东西。
public class GameWorld implements IGameWorld
{
// vector to hold gameobjects
public class GameObject
{
private Point location;
private Color color; // all objects have a random color
GameObject()
{
// method
}
public Point getLocation()
{
// method
}
public Color getColor()
{
// method
}
public void setLocation (Point newCoord)
{
// method
}
public void setColor (Color newColor)
{
// method
}
}
}
这可能吗?如果没有,这样做的替代方案是什么?谢谢。
答案 0 :(得分:1)
您创建类的实例/对象。无需定义表示对象的单独类。无论如何你做错了是因为类GameWorld实现了IGameWorld 而GameWorld必须实现所有方法而不是GameObject类。
您可以删除GameObject类
public class GameWorld implements IGameWorld
{
private Point location;
private Color color; // all objects have a random color
public Point getLocation()
{
// method
}
public Color getColor()
{
// method
}
public void setLocation (Point newCoord)
{
// method
}
public void setColor (Color newColor)
{
// method
}
}
然后创建这个具体类的实例/对象
IGameWorld gameObject = new GameWorld();
答案 1 :(得分:0)
对于上面的回答,我想补充一点,使用接口使我们的代码松散耦合。因此,不要在任何需要的地方使用GameObject。
您的界面定义了所有类创建游戏所需的常用方法,因此我们可以使用:
IGameWorld marioGame = new GameWorld();
IGameWorld tankGame = new GameWorld();
等
答案 2 :(得分:0)
我认为你的GameObject类不应该是在你的GameWorld类中。尝试在单独的文件中将它们设为公共类。然后,只有GameWorld会实现IGameWorld,你的其他类(你提到坦克,岩石,导弹等)将扩展GameObject。