![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ключевое слово 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); } }
|