русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 1117; Нарушение авторских прав


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

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

class Test {public Object getThisO {return this; // Проверим, куда указывает эта ссылка}

public static void main(Sthng s[]) {Testt = newTestO;

System.out.println(t.getThis()==t); // Сравнение} }

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

true

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

class Human {public static void register(Human h){System.out.println(li.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 а=5; {

System.out.println("a="+a+", b="+b); } public static void main(String s[]) {newTestO; } }

Результатом работы программы будет: а=5, b=0

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

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



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

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

class Parent {public int getValueO { return 5;} }

class Child extends Parent { // Переопределение метода public int getValueO {return 3; }

public static void main(String s[]) { Childc = newChild{);

// пример вызова переопределенного метода System.ourprintln(c.getValue{));} }

Вызов переопределенного метода использует механизм полимор­физма, который подробно рассматривается в конце этой лекции. Однако ясно, что результатом выполнения примера будет значение 3. Невозможно, используя ссылку типа Child, получить из метода getVaue() значение 5, родительский метод перекрыт и уже недоступен.

Иногда при переопределении бывает полезно воспользоваться ре­зультатом работы родительского метода. Предположим, он делал сложные вычисления, а переопределенный метод должен вернуть округленный ре­зультат этих вычислений. Понятно, что гораздо удобнее обратиться к роди­тельскому методу, чем заново описывать весь алгоритм. Здесь применяется слово super. Из класса наследника с его помощью можно обращаться к переопределенным методам родителя:

class Parent {public intgetValue{) { return 5;} }

class Child extends Parent {// переопределение метода public intgetValueO {// обращение к методу родителя return supergetValue()+1; }

public static void main(String s[]) {Childc = newChild();

System.ourprintln(c.getValue()); } }

Результатом работы программы будет значение 6.

Обращаться с помощью ключевого слова super к переопределенному методу родителя, т.е. на два уровня наследования вверх, невоз­можно. Если родительский класс переопределил функциональность своего родителя, значит, она не будет доступна его наследникам.

Поскольку ключевые слова this и super требуют наличия ассоциированного объекта, т.е. динамического контекста, использование их в стати­ческом контексте запрещено.



<== предыдущая лекция | следующая лекция ==>
Human.getTotalCountO; // одному и тому же методу | Ключевое слово abstract


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.563 сек.