[fpc-devel] protected class section / documentation

Michael Van Canneyt michael at freepascal.org
Thu Jan 8 10:01:54 CET 2026



On Wed, 7 Jan 2026, Martin via fpc-devel wrote:

> According to https://www.freepascal.org/docs-html/ref/refse34.html
>
>> Protected
>>     Is the same as Private, except that the members of a Protected
>>     section are also accessible to descendent types, even if they are
>>     implemented in other modules. 
>
> "to descendant types" => suggests, from within a descendant type (even if the 
> descendant type is in a different unit).
>
> But the example (working with 3.3.1) from 
> https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/41987 shows that 
> the protected method is accessible
> *_through_* the descendant type.
>
> I.e. from any code in the unit of the descendant type, even code outside the 
> descendant type, if it goes "through" the descendant type.

What is your question ?

The behaviour is normal and logical:

The descendant type is subject to the scoping rules. It inherits the
protected methods from its parent (with the same visibility) and a 
protected method is visible in the same unit/program.

The code that uses the descendent class does not know and has no way of knowing
where the protected method originates from. It knows the descendent class
and can use all protected methods of the descendent class, even if they come
from a parent class.

That is why the 'strict' protected was introduced. If you change the
visibility to strict private in the example, the program will no longer
compile.

Michael.


More information about the fpc-devel mailing list