Вопрос, который вы задали, настолько плохо сформулирован, что у него не может быть разумного правильного ответа без дальнейшего определения. Как уже отмечали другие, вариант (d) вызывает логические несоответствия. Если оставить это в стороне, вопрос остается в лучшем случае двусмысленным.
Наследование и реализация - это бинарные отношения. Поэтому нет единого ответа на вопрос, поддерживают ли их абстрактные классы или интерфейсы. Вместо этого вы должны спросить: какие роли в каждом отношении (Наследование, Реализация) может играть каждый классификатор (Абстрактный класс, Интерфейс)? Для простоты давайте назовем роли «родитель» и «ребенок» в обоих случаях. Не семантически правильно, но достаточно хорошо для наших целей. Во избежание сомнений, хотя:
- Для наследования: «родитель» означает унаследованный классификатор, «ребенок» означает классификатор наследования
- Для реализации: «родитель» означает классификатор, определяющий спецификацию, «ребенок» означает классификатор, обеспечивающий реализацию.
Наконец, нам нужно определить, что означают «наследование» и «реализация». Поскольку вы пометили это как java, мы можем предположить, что «наследование» означает «расширяет», а «реализация» означает «реализует». Тем не менее, это действительно сомнительное определение наследования, которое обычно означает реализацию наследование. Не та семантика, что у Java "расширяет".
OK. Так что теперь мы можем определить таблицу истинности, для которых роли может играть каждый классификатор.
| Inheritance | Realisation |
|parent | child | parent | child |
---------------|-------|-------|--------|-------|
Abstract Class | T | T | F | T |
Interface | T | T | T | F |
-------------------------------------------------
Отсюда видно:
- Абстрактные классы поддерживают обе роли в отношении наследования.
- Абстрактные классы поддерживают только одну роль в отношениях реализации.
Обратите внимание, что таблица будет другой, если «наследование» означает «наследование реализации», а не «расширяет».
Давайте теперь посмотрим на варианты в вашем вопросе
а. Поддержка абстрактного класса
наследственные отношения, но не
реализация отношений.
Мы не можем сказать, правда это или нет, не определив, что означает «поддержка». Абстрактные классы поддерживают обе роли наследования, поэтому мы можем утверждать, что первое предложение истинно. Однако они поддерживают только одну роль Реализации. Значит ли это, что они это делают или не поддерживают? Ответа нет, если только «поддержка» явно не определена как «полная поддержка» - обе роли - или «частичная поддержка» - хотя бы для одной роли.
В вашем списке аналогичная неопределенность для варианта (b).
Вариант (с), однако, разрешим. Оба интерфейса и абстрактные классы поддерживают обе роли наследования, поэтому (c) имеет значение true. Обратите внимание, что если «наследование» означает «наследование реализации», а не «расширяет», то (c) ложно.
В заключение: без правильного определения проблемы невозможно ответить.
НТН.