Проблема наследования Низкий уровень Дизайнерский подход - PullRequest
0 голосов
/ 19 мая 2011

Предположим, у меня есть иерархия классов, подобная той, что показана на рисунке. Предположим, мне нужно включить метод doThis(), который будет иметь различную реализацию в классах C и D. Но класс B не должен реализовывать этот метод.

Должен ли я объявить контракт в классе A и предоставить пустую реализацию в классе B или иметь другой абстрактный класс X, который расширяет A и расширяется на C и D?

Спасибо Sample Class Diagram

Ответы [ 4 ]

3 голосов
/ 19 мая 2011

Не помещайте это в class A.Используйте interface, реализованный теми, кто в этом нуждается.

2 голосов
/ 19 мая 2011

Если только подклассы A будут использовать метод:
Создайте еще один абстрактный класс, расширяющий A и добавляющий метод.

Если вы намереваетесь реализовать этот метод в разных типах классов:
Создайте интерфейс, который объявляет метод, а затем C, D должен также реализовать этот интерфейс.

1 голос
/ 19 мая 2011

Создайте интерфейс под названием «выполнимо». пусть ваши классы C и D реализуют это.

public interface Doable {
     public void doThis();
}

public class D implements Doable { /*implementations*/ }
public class C implements Doable { /*implementations*/ }
0 голосов
/ 20 мая 2011

Не помещайте его в букву А., если вы можете избежать этого.

Наилучшее решение не может быть определено на основании предоставленной вами информации.Это зависит от контекста и значения классов и методов.

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