Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
}
public static void main(String s[]) { Testt = newTest();
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 а=5; {
System.out.println("a="+a+", b="+b);
}
public static void main(String s[]) {
newTest();
}
}
Результатом работы программы будет: а=5,Ь=0
Все происходит так же, как и для статических полей — b получает значение по умолчанию для а, т.е. ноль, а затем а инициализируется значением 5.
Наконец, слово 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 с = new Child();
// пример вызова переопределенного метода System.our.println(c.getValue());
}
Вызов переопределенного метода использует механизм полиморфизма, который подробно рассматривается в конце этой лекции. Однако ясно, что результатом выполнения примера будет значение 3. Невозможно, используя ссылку типа Child, получить из метода getVaue() значение 5, родительский метод перекрыт и уже недоступен.