A) The correction to your test:
Your second class is not achieving anything different. The idea is that Shadowing allows you to hide an inherited public member. The following would result in what Microsoft describes:
Public Class Person
Public Function setStringA(...) As String
...
End Function
End Class
Public Class FirstChildClass
Inherits Person
Private Shadows Function setStringA(...) As String
...
End Function
End Class
Public Class SecondChildClass
Inherits FirstChildClass
End Class
Of course, if you hide the method by shadowing it as Private, then you can't call that method of the child class or the matching base class' method either. As long as it's public, it will be inherited.
B)
<opinion>
The shadow "functionality" of
VB.NET throws mud in the face of OOP. Using Shadows to hide a public method of an inherited class throws a monkey wrench into the concept of inheritance and should be avoided. If you have to use shadowing, then the class design should probably be re-thought.
</opinion>