- •31)Использование ключевого слова final с наследованием
- •2. Зарезервированные слова языка Java
- •3. Управляющие последовательности
- •4. 5. 6. Идентификаторы. Переменные и типы. Примитивные и ссылочные типы
- •8. Вещественные типы и класс Math
- •10. Условный оператор if
- •11. Оператор выбора switch
- •12. Оператор цикла for
- •13. Операторы прерывания continue, break, return, System.Exit
- •14. Основные понятия ооп. Основные принципы ооп
- •15. Формальное определение класса
- •17. Создание конструктора
- •18. Перегрузка конструкторов
- •19. Ссылка на себя. Указатель this
- •21. Зарезервированное слово super
19. Ссылка на себя. Указатель this
Java содержит специальный указатель this. Это указатель, который автоматически передается любой функции-члену при ее вызове и указывает на объект, генерирующий вызов. Например, рассмотрим следующую инструкцию:
ob.f1( ); // предположим, что ob — это объект
Функции f1( ) автоматически передается указатель на объект ob. Этот указатель и называется this.
Указатель this передается только функциям-членам. Дружественным функциям указатель this не передается. Если функция-член работает с другим членом того же класса, она делает это без уточнения имени класса или объекта. Если вызывается функция-член, ей автоматически передается указатель this на объект, который является источником вызова.
Пример.
class samp {
int a, b;
public:
samp (int n, int m) { this->a = n; this->b = m; }
int get_a() { return this->a; }
int get_b() { return this->b; }
};
Указатель this необходим в том случае, когда функция, например, должна возвращать адрес объекта:
return* this;
Использование this необходимо в том случае, если имена параметров функции совпадают с именами элементов класса. В этом случае имя параметра скрывает имя элемента класса.
21. Зарезервированное слово super
Иногда возникает необходимость вызвать поле или метод из прародительского класса. Обычно это бывает в случаях, когда в классе-потомке задано поле с таким же именем (но, обычно, другим типом) или переопределён метод. В результате видимость прародительского поля данных или метода в классе-потомке утеряна. Иногда говорят, что поле или метод затеняются в потомке. В этих случаях используют вызов super.имяПоля или super.имяМетода(список параметров). Слово super в этих случаях означает сокращение от superclass. Если метод или поле заданы не в непосредственном прародителе, а унаследованы от более далёкого прародителя, соответствующие вызовы всё равно будут работать. Но комбинации вида super.super.имя не разрешены.
Использовать вызовы с помощью слова super разрешается только для методов и полей данных объектов. Для методов и переменных класса (то есть объявленных с модификатором static) вызовы с помощью ссылки super запрещены.