Второе применение ключевого слова super

Вторая форма ключевого слова super действует подобно ключевому слову this, за исключением того, что она всегда ссылается на суперкласс подкласса, в котором она использована. Общая форма этого применения ключевого слова super имеет следующий вид:

super.член

Здесь член может быть методом либо переменной экземпляра.

Вторая форма применения ключевого слова super наиболее подходит в тех ситуациях, когда имена членов подкласса скрывают члены суперкласса с такими же именами. Рассмотрим следующую простую иерархию классов:

// Использование ключевого слова super для предотвращения скрытия имени.
class А {
int i;
}
// Создание подкласса посредством расширения класса А.
class В extends А {
int i; // эта переменная i скрывает переменную i в классе А
В(int a, int b) {
super.i = a; // i в классе A
i = b; // i в классе В
}
void show() {
System.out.println("i в суперклассе: " + super.i);
System.out.println("i в подклассе: " + i) ;
}
}
class UseSuper {
public static void main(String args[]) {
В subOb = new В(1, 2);
subOb.show();
}
}

Эта программа отображает следующее:

i в суперклассе: 1
i в подклассе: 2

Хотя переменная экземпляра i в классе В скрывает переменную i в классе А, ключевое слово super позволяет получить доступ к переменной i, определенной в суперклассе. Как вы увидите, ключевое слово super можно использовать также для вызова методов, которые скрываются подклассом.