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.
_______________________________________________
fpc-devel maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to