аргумента метода и т.п.

class Test { public void process() { } public static void main(String s[]) { // process(); - ошибка! // у какого объекта его вызывать? Test test = new Test(); test.process(); // так правильно } }

Ключевые слова this и super

Эти ключевые слова уже упоминались, рассматривались и некоторые случаи их применения. Здесь они будут описаны более подробно.

Если выполнение кода происходит в динамическом контексте, то должен быть объект, ассоциированный с ним. В этом случае ключевое слово this возвращает ссылку на данный объект:

class Test { public Object getThis() { return this; // Проверим, куда указывает эта ссылка } public static void main(String s[]) { Test t = new Test(); System.out.println(t.getThis()==t); // Сравнение } }

Результатом работы программы будет:

true

То есть внутри методов слово this возвращает ссылку на объект, у которого этот метод вызван. Оно необходимо, если нужно передать аргумент, равный ссылке на данный объект, в какой-нибудь метод.

class Human { public static void register(Human h) { System.out.println(h.name+ ' is registered.'); } private String name; public Human (String s) { name = s; register(this); // саморегистрация } public static void main(String s[]) { new Human('John'); } }

Результатом будет:

John is registered.

Другое применение this рассматривалось в случае 'затеняющих' объявлений:

class Human { private String name; public void setName(String name) { this.name=name; } }

Слово this можно использовать для обращения к полям, которые объявляются ниже:

class Test { // int b=a; нельзя обращаться к // необъявленному полю! int b=this.a; int a=5; { System.out.println('a='+a+', b='+b); } public static void main(String s[]) { new Test(); } }

Результатом работы программы будет:

a=5, b=0

Все происходит так же, как и для статических полей – b получает значение по умолчанию для a, т.е. ноль, а затем a инициализируется значением 5.

Наконец, слово this применяется в конструкторах для явного вызова в первой строке другого конструктора этого же класса. Там же может применяться и слово super, только уже для обращения к конструктору родительского класса.

Другие применения слова super также связаны с обращением к родительскому классу объекта. Например, оно может потребоваться в случае переопределения (overriding) родительского метода.

Переопределением называют объявление метода, сигнатура которого совпадает с одним из методов родительского класса.

class Parent { public int getValue() { return 5; }

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату