А что в этом такого? Вы сделали виртуальный метод с реализацией. Затем унаследовали класс, не переопределив метод. Метод публичный. То, что он внутри обращается к приватным полям - без разницы. Приватные поля содержатся в наследнике, просто они ему не доступны.