Can anybody give me a hint or the reason why the following does not compile?

program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
{ tbase1 }
tbase1 = class
public
constructor create(const aname:string); virtual;
end;
{ tbase2 }
tbase2 = class(tbase1)
public
constructor create(const aname:string); override;
constructor create(xxx:integer);
end;
{ tbase3 }
tbase3 = class(tbase2)
public
constructor create(const aname:string); override;
end;
{ tbase1 }
constructor tbase1.create(const aname:string);
begin
end;
{ tbase2 }
constructor tbase2.create(const aname:string);
begin
inherited create(aname);
end;
constructor tbase2.create(xxx:integer);
begin
end;
{ tbase3 }
constructor tbase3.create(const aname:string);
begin
inherited create(aname);
end;
var
b1 : tbase1;
b2 : tbase2;
b3 : tbase3;
begin
b1:=tbase1.create('Test'); // ok
b2:=tbase2.create('Test'); // ok
b2:=tbase2.create(123); // ok
b3:=tbase3.create('Test'); // ok
b3:=tbase3.create(123); // project1.lpr(70,24) Error: Incompatible type for arg no. 1: Got "ShortInt", expected "AnsiString"
end.
Why can tbase3 not use the public constructor for integer from tbase2?
I came to this when I derived a class from TMemIniFile and wanted to use the
constructor for reading the ini-file from stream and not from file. From there I got this
type of error and I tried to create a example (above) for better showing.
I think as the "integer"-constructor from tbase2 is public and therefore visible
it should be possible to use it for tbase3 or should it not?