抽象类困难:从接口继承

时间:2016-02-12 23:26:46

标签: java oop inheritance

原谅我,因为接口对我来说仍然是一个新概念。我试图创建一个简单的重新主题" 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'类?

4 个答案:

答案 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
    }
};

http://www.tutorialspoint.com/java/java_abstraction.htm

答案 3 :(得分:-1)

让我们看看你的代码Block。