我创建了一个类Action
和一个类Person
,因此每个Person
都可以执行许多操作。我希望Action
类的每个实例都具有方法Action.Execute
的不同版本。
我怎么能用Java做到这一点?
public class Action
{
public String Identifier;
public String[] Identifiers;
public Action(String Inpt)
{
this.Identifier = Inpt;
}
public void Execute()
{
System.out.println("Template Empty");
}
}
我希望能够做到这样的事情(我知道这没有意义,但我希望你理解这个想法):
public class Main
{
public static void main(String[] args)
{
Action a = new Action("X");
a
{
public void Execute()
{
//do something diferent
}
}
Action b = new Action("J");
b
{
public void Execute()
{
//do something ELSE
}
}
}
}
答案 0 :(得分:6)
您可以使用下面的method overriding
method overriding javadoc概念: -
public abstract class Action {
public String Identifier;
public String[] Identifiers;
public Action(String Inpt) {
this.Identifier = Inpt;
}
protected abstract void Execute();
}
class HumanAction extends Action {
public HumanAction(String Inpt) {
super(Inpt);
}
@Override
public void Execute() {
System.out.println("human action");
}
}
class AnimalAction extends Action {
public AnimalAction(String Inpt) {
super(Inpt);
}
@Override
public void Execute() {
System.out.println("animal action");
}
}
现在在您的测试课程中: -
public class ActionTest {
public static void main(String[] args) {
HumanAction hu = new HumanAction("X");
hu.Execute();
AnimalAction animal = new AnimalAction("X");
animal.Execute();
}
}
O / p将在下面: -
人类的行为 动物行动
编辑: - 添加了可运行代码的正确示例。
答案 1 :(得分:0)
您需要将Action
类抽象化。然后为每个操作创建新的子类,例如Run
,Walk
,Swim
。
public abstract class Action {
abstract void execute();
}
public class Run extends Action {
@Override
void execute() {
System.out.println("Running");
}
}
public class Swim extends Action {
@Override
void execute() {
System.out.println("Swimming");
}
}
如果您想要更进一步,可以使用Visitor Pattern,然后将Action
传递给Person
课程:
public abstract class Action {
abstract void execute(Person person);
}
public class Run extends Action {
@Override
void execute(Person person) {
System.out.println(person.getName()+" is running");
}
}
然后在你的Person
课程中:
public void executeAction(Action action) {
action.execute(this);
}
,并提供:
Action action = new Run();
myPerson.executeAction(action);
意味着Person
不需要知道如何游泳,步行或跑步,它都包含在Action
课程中“访问”它。