On 2 August 2025 21:59:20 BST, Rob Landers <rob@bottled.codes> wrote:
>If this were the case, then creating a base class with default values wouldn’t 
>be possible. The memory exists and is set aside for that.

Sure it would: the default value is just an assignment that happens at a 
particular point of the object's lifecycle. For a child class which overrides 
the default of a parent (on a public or protected property), only the child 
class's assignment will ever be visible. So it would be perfectly valid for the 
class entry for the child class to only store that one assignment. I don't know 
if that actually happens; maybe the cost of de-duplicating is not seen as 
worthwhile, and the assignments are just run in sequence every time.

Regardless, the philosophical question in this thread seems to be whether 
re-declaring a protected property should change the "ownership" of that 
property. I think it's natural that a protected property *only* declared in a 
sibling class can't be accessed, so some ownership needs to be tracked.

What seems surprising is that the ownership changes if the same property is 
re-declared, especially since the new declaration has to match the original 
(e.g. you can't change the type), and every possible access tells the user the 
two declarations have been completely merged. 

Intuitively, an identical declaration with no change other than a default value 
looks like it would be the same as overwriting the default in a constructor, 
but that is not the case. (https://3v4l.org/5iIak vs https://3v4l.org/rL8pX)

I'm inclined to agree that this is a bug, regardless of whether it's difficult 
to fix in the implementation.


Rowan Tommins
[IMSoP]

Reply via email to