3.8. Ссылка this в конструкторах

Очередной вариант класса Point показывает, как, используя this и со­вмещение методов, можно строить одни конструкторы на основе других.

class Point { int х, у;

Point(int х, int у) { this.x = x; this.y = y; }

Point() { this(-l,-l);

} }

В этом примере второй конструктор для завершения инициализации объекта обращается к первому конструктору.

Методы, использующие совмещение имен, не обязательно должны быть конструкторами. В следующем примере в класс Point добавлены два метода distance. Функция distance возвращает расстояние между двумя точками. Одному из совмещенных методов в качестве параметров передаются координаты точки х и у, другому же эта информация передается в виде параметра-объекта Point.

class Point { int x, у;

Point(int x, int у) { this.x = x; mis. у = у; }

double distance(int x, int y) {

int dx = this.x - x;

int dy = this.y - y;

return Math.sqrt(dx*dx + dy*dy);

}

double distance(Point p) { return distance(p.x, p.y);

} }

class PointDist {

public static void main(String args[]) {

Point pi = new Point(0, 0); Point p2 = new Point(30,40); System.out.println("pl = " +pi.x + ", " +pl.y); System.out.println(''p2 = " + p2.x + ", " + p2.y); System.out.println("pl.distance(p2) = " + pl.distance(p2)); System.outprintln("pl.distance(60, 80) = " + pl.distance(60, 80)); } }

Обратите внимание на то, как во второй форме метода distance для получения результата вызывается его первая форма. Ниже приведен результат работы этой программы: pi = 0, 0 р2 = 30,40 pl.distance(p2) = 50.0 pl.distance(60, 80) = 100.0