如何实现特定于对象的方法?
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();
我正在玩一个 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();