У меня в программе используется наследование интерфейсов друг от друга. При этом объект обладающий конечным интрефейсом, не считает что он обладает родительским интерфейсом. Например
begin MyClass:=TMyClass.Create; if MyClass is IIntf1 then WriteLn('Класс обладает интерфейсом IIntf1') else WriteLn('Класс не обладает интерфейсом IIntf1') //Выполнение по этой линии end.
begin MyClass:=TMyClass.Create; if MyClass is IIntf1 then WriteLn('Класс обладает интерфейсом IIntf1') else WriteLn('Класс не обладает интерфейсом IIntf1') //Выполнение по этой линии end.
Вообще, интерфейсы - это одна сплошная абстракция. Зачем их наследовать, какой смысл?
Vadim писал(а):Вообще, интерфейсы - это одна сплошная абстракция. Зачем их наследовать, какой смысл?
Есть некий общий интерфейс - в моём случае слово с данными, есть менее абстрактный интерфейс - слово с данными типа integer. При этом сами объекты обладающие данными интерфейсами совершенно разные и далеко не всегда родственники. Есть функции на вход которых подается слова с данными, есть функции которые работают только с целочисленными. Отсюда вытекло наследование интерфейсов. Только я не ожидал что в классах придется прописывать все интерфейсы, даже те что должны быть унаследованы. В документации тоже что-то не наткнулся на описание как это должно быть. Поэтому и пытаюсь понять оно так и должно работать? По моей логике - нет.
olegy123 писал(а):можно прилипить к разным не родственным объектам какое то общее свойство или общий метод. аналог в сях множественное наследование.
gluhow писал(а):Только я не ожидал что в классах придется прописывать все интерфейсы, даже те что должны быть унаследованы. В документации тоже что-то не наткнулся на описание как это должно быть. Поэтому и пытаюсь понять оно так и должно работать? По моей логике - нет.
Увы нам всем, разработчики не пользовались Вашей логикой. В Дельфях эту проблему тоже обсуждали весьма бурно. И там то как раз всем и рассказывали, что наследовать интерфейсы можно, но класс видит только ближайший и надо указывать все, чтобы было их видно.
По мне так баг, но вроде как "by design". Какие тут обсуждения. Я не могу придумать сколько-нибудь правдоподобного объяснения такому. Для определения реализуется ли интерфейс существует странная функция Supports. Вроде работает.
То, что у вас необходимость НАСЛЕДОВАНИЯ аж интерфейсов , говорит только о неправильной проектировке системы и неверном определении классов для абстракций. Функции обработки названных у вас "слов" надо объявить в едином интерфейсе с едиными сигнатурами методов. Перебор объектов для обработки лучше реализовать Посетителями. Посетитель целочисленных будет обрабатывать только целочисленные данные, которые проверит его метод Accept. И т.д. ну и в целом неверно на мой взгляд объявлять интерфейс для ДАННЫХ. Интерфейс нужен только для объявления взаимодействия.
java73 писал(а):То, что у вас необходимость НАСЛЕДОВАНИЯ аж интерфейсов , говорит только о неправильной проектировке системы и неверном определении классов для абстракций.
Сильно сказано. А вот ваш тёзка считает иначе :
docs.oracle.com ... public interface Collection<E> extends Iterable<E>