You miss that you do not know what an abstract class is.
And confuse "interface" like com or corba with what an interface really is : just an abstract description to offer as a contract.
What you describe is bolt-ons, what I described is the true meaning of interface.
You may disagree, but read the theory.
Then you will inderstand what an interface really means:
{$ifdef fpc}{$mode objfpc}{$endif}
{$warn 4040 off}
type
TAbstractClass = class abstract
protected
function noise:string;virtual;abstract;
function move:string;virtual;abstract;
end;
Tbird = class
strict private
function noise:string;virtual;
function move:string;virtual;
end;
function TBird.Noise:string;
begin
Result := 'Tjirpp';
end;
function TBird.move:string;
begin
Result := 'I fly';
end;
var
bird:Tbird;
begin
bird := TBird.Create;
writeln(TAbstractClass(bird).noise);
writeln(TAbstractClass(bird).move);
bird.free;
end.
It is just notationally different and much older.
In a sense it is the birth place of interfaces you have come to interpret as "interfaces".
The Rosetta code entry is a good introduction. Read the requirements.
But this is simply well known applied computer science.
And you can do literally the same in C++ of course.
This concept is really realy old and stems from the 70's or earlier.