Java中抽象类和接口的问题

Java中抽象类和接口的问题,java,interface,abstract-class,Java,Interface,Abstract Class,我很确定这可能是我的愚蠢,但我已经四处张望,向一位更有经验的朋友寻求帮助。然而,我正试图从抽象图形类访问x和y,并在接口中使用它们。然而,我现在遇到了困难。我认为最好的选择是让他们受到保护,并以这种方式工作。不管怎样,我的问题是,在Moveable类move下,我将如何操作x和y /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package C

我很确定这可能是我的愚蠢,但我已经四处张望,向一位更有经验的朋友寻求帮助。然而,我正试图从抽象图形类访问x和y,并在接口中使用它们。然而,我现在遇到了困难。我认为最好的选择是让他们受到保护,并以这种方式工作。不管怎样,我的问题是,在Moveable类move下,我将如何操作x和y

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package C_I;

import java.awt.*;

/**
 *
 * @author Mouse
 */
public abstract class Shape implements Moveable {
    private int x;
    private int y;
    private Color myColor;
    private Color background;

    public Shape(int tX, int tY, Color tmpColor, Color tmpBackground)
    {
        x = tX;
        y = tY;
        myColor = tmpColor;
        background = tmpBackground;
    }

    public abstract void draw();

    public abstract void clear();

    public abstract void resize(double s);

    public int getX()
    {
        return x;
    }

    public int getY()
    {
        return y;
    }

    public Color getmyColor()
    {
        return myColor;
    }

    public Color getBackground()
    {
        return background;
    }

    public void setX(int tmpX)
    {
        x = tmpX;
    }

    public void setY(int tmpY)
    {
        y = tmpY;
    }

}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package C_I;

/**
 *
 * @author Mouse
 */
public interface Moveable{
    void clear();

    public void move(int alphaX, int alphaY)
    {
        setX(getX() + alphaX);
    }

    void draw();

}

您的代码中有一个非常基本的错误:

您的接口有一个方法定义。而在其最常见的形式中,接口是一组具有空实体的相关方法。。所以您不能在接口中提供方法的实现。 因此,您可以将move方法的定义从Moveable接口移动到抽象类形状

编辑:以下是您的操作方法:

public abstract class Shape implements Moveable {
    .....
    public void move(int alphaX, int alphaY)
    {
        setX(getX() + alphaX);
    }
}
public interface Moveable{
    void clear();
    public void move(int alphaX, int alphaY);
    void draw();
}

阅读有关接口的内容@

如前所述,接口中不能有方法体

如果希望多个类共享move方法的一个实现,则以下是一些基本选项:

使Moveable成为抽象类而不是接口 提供一个称为MoveableBase的Moveable的基本实现implements Moveable,并使形状扩展MoveableBase
有什么问题吗?恐怕我做不到,条件要求它在Moveable中有一个move方法。@user1256211是接口本身实现move方法的条件,或者只是接口指定实现具体类包含move方法?后者很有道理;前者非常奇怪。根据他的UML图和非常糟糕的说明,看起来他想要前者。Moveable有一个叫做move的方法,它以两个整数作为参数。你可以把它们想象成delta-x和delta-y。你的移动方法做了三件事,就像调整大小一样。首先,它应该清除当前位置的形状。接下来,它分别将形状的当前x和y位置增量/减量增量-x和增量-y。例如,move-1,1将使形状的x位置减少1,y位置增加1。最后,它在新位置绘制形状。接口不能有方法实现。你一定是误解了什么。