Ключевое слово this

Пусть есть два объекта одного типа 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);}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: