Интерфейсы

type
  IPrintable = interface
    procedure Print;
  end;

  //interfaces cannot be instantiated:
  //a class implements them
  TDocument = class(TInterfacedObject,
    IPrintable)
  public
    procedure Print;
  end;

procedure TDocument.Print;
begin
  WriteLn('printing');
end;

var
  Printable: IPrintable;
begin
  //Printable := IPrintable.Create; <- Error
  Printable := TDocument.Create;
  Printable.Print;
end.