Was mich aber schon wundert:
Dem Compiler ist das nicht einmal einen Hinweis wert.
Doppelte Bezeichner kommen ja öfter vor, woher sollte der Compiler wissen wann er darauf hinweisen muss?
Er nimmt einfach den vom Scope her am nächsten deklarierten.
In so einem Fall (unerwarteter Inhalt einer Variablen) benenne ich die Variable einfach um und schaue wer da noch alles drauf zugreift. Dabei wäre dann aufgefallen, dass die abgeleitete Klasse weiter kompiliert.