[fpc-devel] Overridden method with different signature - compiles - should it?
    Martin Frb 
    lazarus at mfriebe.de
       
    Sat Apr  5 12:02:43 CEST 2025
    
    
  
See the below code. (tested 3.2.3 and 3.3.1)
Is this intentionally allowed?
Technically it should work. TSubTest.Test always returns something that 
fits the inherited requirement.
program Project1;
type
   TFoo = class end;
   TBar = class(TFoo) end;
   TTest = class
     function Test: TFoo; virtual; abstract;
   end;
   TSubTest = class(TTest)
     function Test: TBar; override;
   end;
function TSubTest.Test: TBar;
begin  end;
begin  end.
And if that is intentional, then why not also
   TTest = class
     procedure Test(a: TBar); virtual; abstract;
   end;
   TSubTest = class(TTest)
     procedure Test(a: TFoo); override;
   end;
This fails. Even though any TBar passed will be fine to the base and the 
subclass.
And any
   var sub: TSubTest
will accept TFoo too, but such a var can never hold the base class.
    
    
More information about the fpc-devel
mailing list