2012-01-19 3 views
7

Является следующее: (Имейте в виду, что я не писал тела классов, и я тоже не пишу интерфейсы ;-))Суперклассы и подклассы, каждый со своим собственным интерфейсом

abstract class SuperClass implements SuperInterface 

class SubClass extends SuperClass implements SubInterface 

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

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

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

Этот код не может быть прав, пожалуйста, проверьте его еще раз. – SHiRKiT

+0

У вас есть основания подозревать, что это плохая практика? Можете ли вы объяснить эти причины? – Jesper

+3

Почему не может быть прав? отлично выглядит для меня –

ответ

10

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

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

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

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

+0

Правильно, большое спасибо за ваше объяснение! –

1

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

3

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

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

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

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

SuperClass -- implements --> SuperInterface 
SubClass -- extends --> SuperClass -- implements --> SuperInterface*, SubInterface 
  • Неявные орудия из-за появления простирается от SuperClass
Смежные вопросы