В чем преимущество расширения интерфейса СНОВА, который уже расширен его родителем? - PullRequest
0 голосов
/ 07 декабря 2018

Скажите, у меня есть код ниже:

interface IAAA {
    void aaa();
}

interface IBBB extends IAAA {
    void bbb();
}

class MyClass implements IAAA, IBBB {
    public void bbb() { }
    public void aaa() { }
}

Есть ли какая-либо выгода от внедрения IAAA в MyClass?Как видите, IAAA уже расширен на IBBB, а MyClass реализует как IAAA, так и IBBB.Кажется, удаление IAAA из MyClass ни на что не влияет.

Причина, по которой я задаю этот глупый вопрос, заключается в том, что я довольно часто вижу подобные шаблоны в Android OpenИсходный проект , а иногда даже в стандартном Java API, таком как ArrayList.

Один пример, о котором я хочу поговорить, это SpannableStringBuilder.

Spanned интерфейс расширяет CharSequence интерфейс.

Spannable интерфейс расширяет Spanned интерфейс.

Editable интерфейс расширяет как CharSequence, так и Spannable интерфейс.

SpannableStringBuilder класс реализует интерфейс CharSequence, Spannable, Editable СНОВА.

Я действительно не понимаю.Какой смысл делать так?Зачем?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Документация, подтверждающая тот факт, что MyClass должна реализовывать IAAA, не заставляя читателя кода (человека) взглянуть на IBBB, чтобы знать это.

0 голосов
/ 07 декабря 2018

Технических причин нет.Это может немного облегчить обслуживание - если Bar расширяет Foo и вы хотите найти все классы, реализующие Foo, вам нужно искать только Foo, а не Foo и Bar.

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