【发布时间】:2010-07-13 22:44:50
【问题描述】:
我的界面如下:
package example;
import java.awt.Point;
public interface Thing {
public enum MovingState {
MOVING_LEFT,
MOVING_UP,
MOVING_RIGHT,
MOVING_DOWN
}
public void setNewPosition(MovingState state);
public Point getPosition();
}
和一个实现类:
package example;
import java.awt.Point;
public class ThingImpl implements Thing {
public enum MovingState {
MOVING_LEFT (-1, 0),
MOVING_UP (0, -1),
MOVING_RIGHT (1, 0),
MOVING_DOWN (0, 1);
private int x_move;
private int y_move;
MovingState(int x, int y) {
x_move = x;
y_move = y;
}
public int xMove() {
return x_move;
}
public int yMove() {
return y_move;
}
}
private Point position;
public void setNewPosition(MovingState state) {
position.translate(state.xMove(), state.yMove());
}
public Point getPosition() {
return position;
}
}
想法是让ThingImpl 中的MovingState 从Thing 接口扩展MovingState(从而将MovingState 的实际实现与接口分开)。
这不起作用 - ThingImpl 中的 MovingState 枚举隐藏了接口中的定义而不是扩展它,然后编译器抱怨 ThingImpl 不是抽象的并且不会覆盖抽象方法 setNewPosition( Thing.MovingState) 中的事物。
有没有一种实际的方法可以实现我想要实现的目标?还是 Java 根本就没有这个能力?
【问题讨论】: