Ключевое слово
super
используется для ссылки на родительский класс, который в данном случае равен B
. Следовательно, вы получите вывод как 6
.
a
, определенный в interface A
, является статическим, а a
, определенный в Class B
, является переменной экземпляра. Следовательно, когда мы делаем super.a
, это относится к значению экземпляра a
, которое определено в Class B
Если вы переименуете переменную в B
, скажем, aa
, вы получите сообщение об ошибке компилятора, говорящее a cannot be resolved or is not a field
, потому что a
, определенный в interface A
, не доступен напрямую в class C
, потому что это по умолчанию static
. Чтобы получить доступ к a
, определенному в interface A
, нам нужно сделать явный вызов A.a
в классе C
Если вы определите a
как статическое в class B
и удалите super
, вы получите compiler error: The field a is ambiguous