Multiple Overloading methods

Code the following example from the text-book and explain which methods are overloaded and how.
import java.awt.Point;

class MyRect {
    int x1 = 0;
    int y1 = 0;
    int x2 = 0;
    int y2 = 0;

    MyRect buildRect(int x1, int y1, int x2, int y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
        return this;
    }

    MyRect buildRect(Point topLeft, Point bottomRight) {
        x1 = topLeft.x;
        y1 = topLeft.y;
        x2 = bottomRight.x;
        y2 = bottomRight.y;
        return this;
    }

    MyRect buildRect(Point topLeft, int w, int h) {
        x1 = topLeft.x;
        y1 = topLeft.y;
        x2 = (x1 + w);
        y2 = (y1 + h);
        return this;
    }

    void printRect(){
        System.out.print("MyRect: <" + x1 + ", " + y1);
        System.out.println(", " + x2 + ", " + y2 + ">");
    }

    public static void main(String arguments[]) {
        MyRect rect = new MyRect();

        System.out.println("Calling buildRect with coordinates 25,25, 50,50:");
        rect.buildRect(25, 25, 50, 50);
        rect.printRect();
        System.out.println("***");

        System.out.println("Calling buildRect with points (10,10), (20,20):");
        rect.buildRect(new Point(10,10), new Point(20,20));
        rect.printRect();
        System.out.println("***");

        System.out.print("Calling buildRect with 1 point (10,10),");
        System.out.println(" width (50) and height (50):");

        rect.buildRect(new Point(10,10), 50, 50);
        rect.printRect();
        System.out.println("***");
   }
}