Суперкласс и подкласс каждый со своим интерфейсом - PullRequest
7 голосов
/ 19 января 2012

Это нормально? (имейте в виду, что я не писал тела классов и не писал интерфейсов; -))

abstract class SuperClass implements SuperInterface

class SubClass extends SuperClass implements SubInterface

Или это вообще считается плохой практикой?

Что меня удивило, так это то, что следующее не сработало:

List<SubInterface> myList;
...
for(SuperInterface si : myList) {
    ...
}

Ответы [ 3 ]

10 голосов
/ 19 января 2012

Это ни хорошо, ни плохо.SubClass здесь реализует как SuperInterface, так и SubInterface (а также интерфейс, определенный с помощью SuperClass 'открытых методов).Если это то, что вам нужно - это нормально.

Что касается вашего второго примера

List<SubInterface> myList;
...
for(SuperInterface si : myList) {
    ...
}

Вы объявили список SubInterface элементов, но хотите извлечь из него SuperInterface элементы.Если SubInterface расширяет SuperInterface, то это имеет некоторый смысл.В противном случае нет.

3 голосов
/ 19 января 2012

Это правильно. Почему нет?

Ваш Суперкласс реализует SuperInterface, который также реализован вашим Подклассом (благодаря Подклассу расширяется Суперкласс).

Кроме того, ваш подкласс реализует другой интерфейс (SubInterface).

В вашем коде / архитектуре нет ничего плохого.

SuperClass -- implements --> SuperInterface
SubClass -- extends --> SuperClass -- implements --> SuperInterface*, SubInterface
  • Неявные реализации из-за расширений SuperClass
1 голос
/ 19 января 2012

это хорошо, в зависимости от того, чего вы хотите достичь (может быть, лучший дизайн для того, что вы пытаетесь сделать), имейте в виду, что SubClass является одновременно SuperInterface и SubInterface

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