С одной стороны, любой метод SuperClass
видит список суперклассов, а не список подклассов. Это почти наверняка приводит к тонким ошибкам. Например. когда вы говорите
Я могу получить someList.size()
в Superclass
На самом деле вы получаете размер списка в Superclass
, а не подкласс. Список суперклассов может быть пустым, в то время как список подклассов содержит элементы (или наоборот).
Причина этого в том, что SubClassA.someList
никоим образом не заменяет и не переопределяет Superclass.someList
- он просто затеняет его, поэтому методы подкласса видят SubClassA.someList
вместо Superclass.someList
. Однако это абсолютно не влияет на Superclass
. Методы можно сделать виртуальными (а в Java они по умолчанию), но члены данных не могут.