Переменные-члены не могут быть переопределены подобно методам. number Переменные в ваших классах Beta и Gamaскрывают (не переопределяют) переменную-член number суперкласса.
С помощью приведения вы можете получить доступ к скрытому члену в суперклассе.
Ответ 2
Поля не могут быть переопределены; во-первых, к ним не осуществляется полиморфный доступ - вы просто объявляете новое поле в каждом случае.
Он компилируется, потому что в каждом случае типа выражения во время компиляции достаточно, чтобы определить, какое вызываемое поле number вы имеете в виду.
В реальном программировании вы могли бы избежать этого двумя способами:
Здравый смысл: затенение полей затрудняет чтение вашего кода, поэтому просто не делайте этого
Видимость: если вы сделаете все свои поля закрытыми, подклассы все равно не будут знать о них
Ответ 3
Java Скрывает поле
Когда у преемника есть поле с тем же именем, что и у поля суперкласса, оно называется - Скрывающее поле
Поле Java не поддерживает полиморфизм и не учитывает тип поля
classA { Stringfield="A: field";
String foo() { return"A: foo()"; } }
classBextendsA { //B's field hides A's field Stringfield="B: field";