Class B can inherit the protected member, but only it and its instances can access it.
184.108.40.206 Access to a protected Member
Let C be the class in which a protected member m is declared. Access is permitted only within the body of a subclass S of C. In addition, if Id denotes an instance field or instance method, then:
* If the access is by a qualified name Q.Id, where Q is an ExpressionName, then the access is permitted if and only if the type of the expression Q is S or a subclass of S.
* If the access is by a field access expression E.Id, where E is a Primary expression, or by a method invocation expression E.Id(. . .), where E is a Primary expression, then the access is permitted if and only if the type of E is S or a subclass of S.
and gave it an immediate try. It doesn't compile provided that I used the code that I had posted before. Apparently, you can't treat super as anything but super. Upcasting the subclass to its superclass didn't substitute the real instance of the superclass object which is available only thru the call to super in our case.
super().doStuff() as ((MyBase) this).doStuff()
Suppose that a field access expression super.name appears within class C, and the immediate superclass of C is class S. Then super.name is treated exactly as if it had been the expression ((S)this).name; thus, it refers to the field named name of the current object, but with the current object viewed as an instance of the superclass. Thus it can access the field named name that is visible in class S, even if that field is hidden by a declaration of a field named name in class C.