我目前是一名学习Java的学生,还没有学习任何OO设计原则。我想修改现有的类组:MathEditor,OCREditor,DataEditor,ParameterEditor。

我对继承等有所了解。但是,每个这些类都继承一个不同的父类。例如,MathEditor继承Math类,而OCREditor继承OCR类。我想为所有四个类添加一个名为changeName的方法。 changeName中的代码完全相同。我应该创建一个接口并使这四个类实现该接口吗?或者我应该只复制/粘贴changeName并将其手动添加到每个类中(我觉得这不好)。

我很困惑,我不想修改太多代码并创建太多类,因为我正在修改现有代码库。

最佳答案

如果您不能让它们从同一父级继承,则可以通过组成来增强它们。创建一个类,该类可能名为EditorAssistant,该类具有changeName方法,让您的类都继承同一个接口,该接口也具有changeName方法,然后将助手的方法称为委托。

例如:

interface Editable {
   void changeName(String name);

   String getName();
}

class EditorAssistant implements Editable {
   private String name = "";

   @Override
   public void changeName(String name) {
      this.name = name;
   }

   @Override
   public String getName() {
      return name;
   }
}

class SomethingEditor implements Editable {
   private EditorAssistant assistant = new EditorAssistant();

   @Override
   public void changeName(String name) {
      assistant.changeName(name);
   }

   @Override
   public String getName() {
      return assistant.getName();
   }
}

class SomeOtherEditor implements Editable {
   private EditorAssistant assistant = new EditorAssistant();

   @Override
   public void changeName(String name) {
      assistant.changeName(name);
   }

   @Override
   public String getName() {
      return assistant.getName();
   }
}


诚然,这是一个简单的例子,但是可以很好地扩展。

10-08 12:48