[英]Override a method for each instance of a class in Java
我創建了一個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
}
}
}
}
您可以使用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將低於:
人類行為動物行為
編輯:-添加了帶有可運行代碼的正確示例。
您需要使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
類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.