Ограничьте область переопределенного метода в наследовании Java - PullRequest
2 голосов
/ 21 февраля 2012
public abstract class SoftwareComponent {

    private Set<Information> generateInfo = new HashSet<Information>();
    private Set<Information>  consumeInfo = new HashSet<Information>();
    public Set<Infomation>  getGeneratedInfo() { ... }
    public Set<Information> getConsumedInfo()  {....}
}

public  class SensorDriver extends SoftwareComponent {

}

public  class Information { ... }

public class SensorMeasurement extends Information {   }

public class command extends Information {     }

Вышеупомянутый код - это структура моей программы. Теперь ситуация с драйвером датчика наследуется все его родительский метод класса. Я хочу ограничить область действия переопределенного метода в драйвере датчика.

Предел «Драйвер датчика» может генерировать только информацию «Измерение датчика». «Драйвер датчика» не может использовать информацию «Command».

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Вы можете сделать свой программный компонент универсальным и сделать информацию параметром:

public abstract class SoftwareComponent<I extends Information> {

  private Set<I> generateInfo = new HashSet<I>();
  private Set<I> consumeInfo = new HashSet<I>();
  public Set<I> getGeneratedInfo() { ... }
  public Set<I> getConsumedInfo()  {....}
}

public class SensorDriver extends SoftwareComponent<SensorMeasurement> {
}
0 голосов
/ 21 февраля 2012

Каждый раз, когда вы рассматриваете одиночное наследование как ответ, вы можете столкнуться с проблемами.Я думаю, что вы на самом деле хотите использовать множественное наследование (в форме интерфейсов).Вы должны рассмотреть возможность объявления интерфейсов, которые позволяют вам выполнять определенные действия, и, возможно, абстрактных классов, которые реализуют некоторые из этих интерфейсов, которые «группируют» логические классы вместе.

Как общее практическое правило, если B является A, он унаследует все A. Но если B является A, за исключением x, y и z, вы можете выбросить исключение UnsupportedOperationException, которое допустимо вВ некоторых случаях, но вы должны подумать о реструктуризации вашей иерархии, чтобы она имела больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...