Как моделировать (под)классы с идентичными атрибутами и методами?

Я пытаюсь смоделировать следующую ситуацию в Java, но я полагаю, что это может быть общая проблема ООП: у меня есть 3 (или, может быть, больше) разных класса, которые имеют некоторые общие атрибуты и методы, а также некоторые атрибуты и методы, которые являются специфическими. к каждому из классов.

Пока это классическая ситуация наследования.

Проблема: Третий класс содержит некоторые атрибуты/методы, идентичные (только) первому классу, и некоторые идентичные (только) второму классу. Также следует использовать полиморфизм.

Чтобы быть более конкретным: я хочу смоделировать станции, где люди могут брать вещи: естьBikeStations,CanoeStationsиBikeAndCanoeStations, с одним или несколькими общими методами поведения (для полиморфизма).

Поскольку, на первый взгляд, это классическая проблема наследования, можно смоделировать классы следующим образом:

      // Superclass (Station)
public abstract class Station {

   // common attributes

   // common methods

   public abstract void doSomething();
}
      // Subclass 1 (BikeStation)
public class BikeStation extends Station {

   private int someBikeSpecificAttribute;

   // more bike station specific attributes

   public void doSomething() {
      // bike station specific stuff
   }

   // more bike station specific methods
}
      // Subclass 2 (CanoeStation)
public class CanoeStation extends Station {

   private int someCanoeSpecificAttribute;

   // more canoe station specific attributes

   public void doSomething() {
      // canoe station specific stuff
   }

   // more canoe station specific methods
}
      // Subclass 3 (BikeAndCanoeStation)
public class BikeAndCanoeStation extends Station {

   private int someBikeSpecificAttribute;   // same as in BikeStation
   private int someCanoeSpecificAttribute;  // same as in CanoeStation

   // more mixed station specific attributes

   public void doSomething() { 
      // bike station specific stuff (same as in BikeStation)
      // canoe station specific stuff (same as in CanoeStation)
   }

   // more mixed station specific methods
}

Однако было бы неправильно просто копировать атрибуты и методы/инструкции из первых двух классов в третий. Это просто не похоже на хорошее ООП. Это создает избыточный код, и я не могу легко добавить другие классы (станции) позже.

Поэтому я подумал об использовании интерфейсов или даже шаблона стратегии , но это решает только поведенческую проблему (то есть методы), если вообще решает.

Как бы вы смоделировали такую ​​ситуацию с хорошим ООП (желательно на Java)?

(отредактированный вопрос, чтобы включить/уточнить использование полиморфизма.)

0 ответов

Другие вопросы по тегам