Когда класс реализует интерфейс-потомок, почему он не считается автоматически реализующим базовый интерфейс?

По какой причине это не скомпилируется?

type
  IInterfaceA = interface ['{44F93616-0161-4912-9D63-3E8AA140CA0D}']
    procedure DoA;
  end;

  IInterfaceB = interface(IInterfaceA) ['{80CB6D35-E12F-462A-AAA9-E7C0F6FE0982}']
    procedure DoB;
  end;

  TImplementsAB = class(TSingletonImplementation, IInterfaceB)
    procedure DoA;
    procedure DoB;
  end;

var
  ImplementsAB: TImplementsAB;
  InterfaceA: IInterfaceA;
  InterfaceB: IInterfaceB;
begin
  ImplementsAB := TImplementsAB.Create;
  InterfaceA := ImplementsAB; >> incompatible types
  ...
end

Напротив, вот как я заставляю это работать:

InterfaceA := ImplementsAB as InterfaceB;

или же

InterfaceA := InterfaceB;

Я имею в виду, если IInterfaceB наследуется от IInterfaceA, а TImplementsAB реализует IInterfaceB, было бы не логично также реализовать IInterfaceA и быть совместимым с типом?

Ответы на вопрос(2)

Ваш ответ на вопрос