如何实现特定于对象的方法?

How to implement object specific methods?

我正在玩一个 Java 游戏,我目前正在尝试实现一个菜单系统。我有一个 Menu class 和 MenuBox class,我想做的是在 MenuBox class 中有一个抽象方法我会在代码中的其他地方定义,因为每个 MenuBox 都可以产生不同的效果(pause/unpause 游戏,打开不同的菜单,更改选项,保存游戏等...)。

到目前为止,我已经添加了一个名为 Clickable 的接口,它只有 activate() 方法,它在 MenuBox class 中定义为空,我想在制作 Menu 对象时重新定义它。这可能吗?我一直在研究,只发现了死胡同,但问题与我的不完全相同,所以我不确定这是否可行,或者我是否需要完全不同的方法。

这里是界面和菜单框class:

public interface Clickable {
    public abstract void activate();
}

public class MenuBox implements Clickable{
    private String label;
    private int x,y,width,height;
    public MenuBox(String label,int x,int y,int width,int heigth){
        this.label = label;
        this.x = x;
        this.y =y;
        this.width=width;
        this.height=heigth;
    }
    public void activate() {
        //Empty method to redefine outside the class i.e. after instantiation
    }
}

您可以在 MenuBox 构造函数中注入一个 class 来委托 activate() 方法的操作。像这样:

public class MenuBox implements Clickable{
    private String label;
    private int x,y,width,height;

    private ActionClass action;

    public MenuBox(String label,int x,int y,int width,int heigth, ActionClass action){
        this.label = label;
        this.x = x;
        this.y =y;
        this.width=width;
        this.height=heigth;

        this.action = action;
    }

    public void activate() {
        this.action.activate();
    }
} 

ActionClass 是一个接口,当 activate() 方法具有不同的行为时,您可以在不同的场景中注入不同的实现。

您可以将 MenuBox class 设为摘要 class

public interface Clickable {
    public abstract void activate();
}

public abstract class MenuBox implements Clickable{
    private String label;
    private int x,y,width,height;
    public MenuBox(String label,int x,int y,int width,int heigth){
        this.label = label;
        this.x = x;
        this.y =y;
        this.width=width;
        this.height=heigth;
    }
}

然后当你想实例化一个新的MenuBox时你可以定义抽象方法

MenuBox m = new MenuBox("",0,1,0,1){

    public void activate(){
        System.out.print("activated");
    }

};

m.activate();