Earlier quoted context omitted.
> A piece of code that accepts a reference to some type A and only ever reads from it can correctly accept a reference to a subtype of A. The same is true of a piece of code that writes through the reference or returns it. That's how sub-typing works. > A piece of code that accepts a reference to a type A and only ever writes to it can correctly accept a reference to a supertype of A. Have you ever programmed in a la…
> The same is true of a piece of code that writes through the reference or returns it. That's how sub-typing works. But it is not true that it is correctly typed with respect to a a supertype of A (it is not valid to call the code with a reference to a supertype of A). Code that only writes through the reference is correctly typed with respect to a super-type of A (it is valid to call the code with a reference to a s…
I'm not trying to be snarky, I genuinely want to know what you think of that code snippet I showed you. You claim it should work, but anyone with an understanding of programming would tell you it shouldn't. You can't write to a member variable that doesn't exist. Have you encountered inheritance before? Do you know what a “super-type” is? The mistake you're making here is very basic and I should like to know your level of experience.