Якщо виконання коду відбувається в динамічному контексті, тобто має бути об'єкт, асоційований з ним. У цьому випадку ключове слово this повертає посилання на даний об'єкт:
class Test {
public Object getThis () {
return this;
// Перевіримо, куди вказує це посилання
}
public static void main (String s []) {
Test t = new Test ();
System.out.println (t.getThis () == t);
// Порівняння
}
}
Тобто всередині методів слово this повертає посилання на об'єкт, у якого цей метод викликаний. Воно необхідне, якщо потрібно передати аргумент, рівний посиланням на даний об'єкт, у який-небудь метод.
Також слово this застосовується в конструкторах для явного виклику в першому рядку іншого конструктора цього ж класу. Там також може застосовуватися й слово super, алі вже для звернення до конструктора батьківського класу.
Інші застосування слова super також пов'язані зі зверненням до батьківського типу об'єкта. Наприклад, воно може знадобитися в разі перевизначення (overriding) батьківського методу.
Перевизначенням називають оголошення методу, сигнатура якого збігається з одним із методів батьківського класу.
class Parent {
public int getValue () {
return 5;
}
}
class Child extends Parent {
// Перевизначення методу
public int getValue () {
return 3;
}
public static void main (String s []) {
Child c = new Child ();
// Приклад виклику перевизначеного методу
System.out.println (c.getValue ());
}
}
Оскільки ключові слова this і super вимагають наявності асоційованого об'єкту, тобто динамічного контексту, використання їх у статичному контексті заборонено.