class PointTest {
	public static void main(String args[]) {
		Point p = new Point();
		Point p2 = new Point(2, 2);
		Point p3 = new Point(5, 5);

		System.out.println(p.x);
		System.out.println(p.y);
		System.out.println(p);
		System.out.println(p2);
		System.out.println(p.equals(p2));

		double d = Point.getDistance(p2, p3);
		System.out.println(d);

		System.out.println(p.getDistance(p2));

		Point3D p4 = new Point3D();
		System.out.println(p4);
	}
}

// --------------------------------------------------

class Point3D extends Point {
	int z;

	Point3D() {
		this(1, 1, 1);
	}

	Point3D(int x, int y, int z) {
		super(x, y);
		this.z = z;
	}

	public String toString() {
		return super.toString() + "," + z;
	}
}

public class Point {
	int x;
	int y;

	Point() {
		// x = 1;
		// y = 1;
		this(1, 1); // Point(1,1);
	}

	Point(int a, int b) {
		x = a;
		y = b;
	}

	public double getDistance(Point p) {
		return getDistance(this, p);
	}

	public static double getDistance(Point p1, Point p2) {
		int a = p2.x - p1.x;
		int b = p2.y - p1.y;
		return Math.sqrt(a * a + b * b); // Math.sqrt(Math.pow(a,2)+Math.pow(b,2))
	}

	@Override
	public boolean equals(Object o) {
		// if(o==null) return false;
		if (!(o instanceof Point))
			return false;

		Point p = (Point) o;
		// if(this.x==p.x && this.y==p.y){
		// return true;
		// } else {
		// return false;
		// }
		return this.x == p.x && this.y == p.y;
	}

	@Override
	public String toString() {
		return x + "," + y;
	}

}