在名为Button
的类中,我有一个名为onClick()
的函数。我有2个Button
类的实例。默认情况下,onClick()
为空 - (此处为定义:public void onClick () {}
)。在另一个名为MainMenuScreen
的类中,我创建了Button
的2个实例,但我需要一种方法来分别为每个实例更改onClick()
按钮的主体。如果这是不可能的,我需要一种方法将函数作为另一个函数中的参数,例如:void function (void param) {}
,但我不确定这是否可能。如果您需要查看更多我的代码,那么只需撰写评论。
答案 0 :(得分:1)
扩展类并覆盖方法。可以在MainMenuScreen类中定义扩展类:
class OtherButton extends Button {
@Override
public void onClick(){
//new logic
}
}
答案 1 :(得分:1)
如果Button只需要定义它可以做什么,那么它应该是一个接口并让特定的按钮实现它。这在处理大型应用程序时成为一个优势,因为它允许您使用dependency inversion principle来解耦代码。
public interface Button {
public void onClick();
}
public class OtherButton implements Button {
@Override
public void onClick(){
//new logic
}
}
出于您的目的,您应该像上面的示例一样使用继承。但是你询问了如何将功能传递给方法,是的,你可以这样做。 Java 8使lambdas变得相当容易。
public static void main(String[] args) {
//Use can put the logic directly in the body of the lambda
onClick((Void v) -> {System.out.println("Button Clicked"); return null;});
//Or you can use this to pass another method in
onClick((Void v) -> {customOnClick(); return null;});
}
public static void customOnClick() {
System.out.println("Button Clicked: customOnClick");
}
public static void onClick(Function<Void, Void> action) {
action.apply(null);
}
在Java 8以下的版本中,您可以使用匿名函数将功能传递给方法。
public static void main(String[] args) {
onClick(new Action() {
public void doAction() {
System.out.println("Button Clicked");
}
});
}
public static void onClick(Action action) {
action.doAction();
}
public interface Action {
public void doAction();
}