Пусть есть два объекта одного типа a и b.
class Banana { void peel (int i) {}}
public class BananaTest {
public static void main (String [] args){
Banana a = new Banana (),
b = new Banana ();
a. peel (1);
b. peel (2);
}
}
Метод peel() для всех объектов класса Banana один.
Как метод peel() узнает, для кого он вызывается: a и b? А происходит следующее: передается скрытый аргумент – ссылка на объект, для которого вызван метод.
Ссылка на текущий объект называется this. (Мы говорим «Я», а не «Ваня»). this - это «Я».
public class Apricot {
void pick () {}
void pit () {pick ();} // можно записать this.pick ()-но не нужно.
}
Используется this:
1) при возврате ссылки на текущий объект: return this
public class Leaf {
int i = 0;
Leaf increment () {
i++;
return this;
}
void print () {
System.out.println (i+ “”); }
public static void main (String [] args) {
Leaf x = new Leaf ();
x.increment().increment().increment().print();
}
}
Напечатается 3
2) передача ссылки на текущий объект другому методу
class Peeler {
static Apple peel (Apple apple) {//почистили
return apple;
}
}
class Apple {
Apple getPeeled (){//чистим методом Peeler.peel ()
return Peeler.peel (this);
}
}
class Person {
public void eat (Apple apple) {
Apple peeled = apple.getPeeled ();
System.out.println (“Jummy”);
|
|
}
}
public class PassingThis {
public static void main (String[] args) {
new Person().eat(new Apple ());
}
}
3) Вызов конструктора из конструктора.
public class Flower {
int petalCount=0;
String s = “initial value”;
Flower (int petals) {
petalCount = petals;
}
Flower (String ss) {s=ss;}
Flower (String s, int petals) { /s – совпадение имен
this (petals); / должно быть первой операцией
this.s = s; / инициализировали поле s
}
Flower () {this (“hi”, 47);}
}