簡體   English   中英

覆蓋Java中類的每個實例的方法

[英]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類抽象化。 然后為每個動作創建新的子類,例如RunWalkSwim

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM