原谅我,因为接口对我来说仍然是一个新概念。我试图创建一个简单的重新主题" pong"风格的游戏。我现在正在使用它进行初始设置,我只是在屏幕上创建各个块,稍后我将在另一个类中操作。
我编写了我想要用于此类的所有构造函数,getMethods,setMethods和Interface。但是,当我尝试编译并运行该类及其运行程序时,我从IDE中得到一个错误,该错误表示" Block不是抽象的,并且不会覆盖Locatable"中的抽象方法getY()。
getY()位于Interface Locatable
中我尝试将这个类抽象化,这解决了这个类的问题。但是,在我的跑步者类中,我无法将对象从跑步者发送到原始类,因为现在它尝试发送给它的类是抽象的。
这是我遇到问题的课程的开始:
public class Block implements Locatable {
//instance variables
private int xPos;
private int yPos;
private int width;
private int height;
private Color color;
public Block()
{
xPos = 0;
yPos = 0;
width = 0;
height = 0;
}
public Block(int x, int y, int wdth, int ht)
{
xPos = x;
yPos = y;
width = wdth;
height = ht;
}
public Block(int x, int y, int wdth, int ht, Color col)
{
xPos = x;
yPos = y;
width = wdth;
height = ht;
color = col;
}
public void setBlockPos(int x, int y)
{
xPos = x;
yPos = y;
}
public void setXPos(int x)
{
xPos = x;
}
public void setYPos(int y)
{
yPos = y;
}
public void setWidth(int wdth)
{
width = wdth;
}
public void setHeight(int ht)
{
height = ht;
}
public void draw(Graphics window)
{
window.setColor(color);
window.fillRect(getX(), getY(), getWidth(), getHeight());
}
public int getXPos()
{
return xPos;
}
public int getYPos()
{
return yPos;
}
public int getWidth()
{
return width;
}
public int getHeight()
{
return height;
}
public String toString()
{
return "" + xPos + " " + yPos + " " + width + " " + height;
}
}
这是我尝试在上面的课程中使用的界面:
public interface Locatable {
public void setPos( int x, int y);
public void setX( int x );
public void setY( int y );
public int getX();
public int getY(); }
这是我的跑步者类来测试这是否有效:
class BlockTestOne {
public static void main( String args[] )
{
Block one = new Block();
out.println(one);
Block two = new Block(50,50,30,30);
out.println(two);
Block three = new Block(350,350,15,15,Color.red);
out.println(three);
Block four = new Block(450,50,20,60, Color.green);
out.println(four);
} }
我还需要在界面或我的' Block'类?
答案 0 :(得分:0)
您已经使用了" setYPos"在课堂上但是" setY"在界面中。您的X和Y getter和setter也有类似的问题。
答案 1 :(得分:0)
因为您正在Block类中实现Locatable接口。 根据合同,Block需要为接口中定义的所有方法提供实现。
答案 2 :(得分:0)
抽象类无法实例化,因此您要么必须在Block中实现所有接口方法,要么创建另一个从Block扩展并实现抽象方法的类,或者实现Block inline的抽象方法,这里是一个最后一个选项的例子
Block one = new Block(){
@override
public int getY(){
//do stuff
}
};
答案 3 :(得分:-1)
让我们看看你的代码Block。