Пример класса: точки на плоскости

// Имя пакета у вас может отличаться, оно задаётся при создании проекта.
package geometry;
// Класс Scanner потребуется нам для ввода данных в одном из методов.
import java.util.Scanner;

    /* В классе Main мы сможем пользоваться методами и объектами класса
     * Point, который мы опишем позже. Это допустимо. Хотя для
     * последовательности восприятия рекоменуем вам пролистать пример
     * до того момента, где создаётся класс Point и уж потом вернуться к
     * изучению класса Main с его методом main. Кстати, класс Main можно
     * было описать и после класса Point.
     */

public class Main {

    public static void main(String[] args) {
        // Создаём объект класса точек с помощью конструктора по умолчанию
        Point a = new Point();
        System.out.println("Задайте координаты первой точки на плоскости: ");
        // Применяем к объекту метод для ввода координат с клавиатуры
        a.inputPoint();
        // Создаём второй объект с помощью конструктора с двумя параметрами
        // Параметры мы указали такие, что точка также совпадёт с началом
        // отсчёта, как если бы воспользовались консутрктором по умолчанию.
        Point b = new Point(0,0);
        System.out.println("Задайте координаты второй точки на плоскости: ");
        // Применяем ко второму объекту метод для ввода координат с клавиатуры
        b.inputPoint();
        /* Далее мы проверим совпадают ли точки и, если нет, то вычислим
         * расстояние между ними и выведем его на экран. Сравнение точек мы
         * производим с помощью метода, сравнение a==b всегда даст ложный
         * результат, поскольку a и b хранят ссылки (адреса) объектов, а даже
         * два объекта с одинаковыми значениями всех свойств имеют разные
         * адреса в памяти.
         */
        if( a.isSame(b) ) {
            System.out.println("Точки совпадают!");
        } else {
            System.out.println("Расстояние между точками: "+b.getDistance(a));
        }
        /* Далее мы проверим какая из точек расположена ближе к началу
         * координат. И сообщим об этом пользователю.
         */
        if( a.getRadius() < b.getRadius() ) {
            System.out.println("К началу координат ближе первая точка!");
        } else if(a.getRadius() == b.getRadius()) {
            System.out.println("Точки равноудалены от начала координат!");
        } else {
            System.out.println("К началу координат ближе вторая точка!");
        }
    }

}

class Point {

    /* Описываем свойства класса точек на плоскости. Каждая точка
     * в ПДСК характеризуется двумя действительными числами —
     * координатами точки. Из этих соображений создаём два свойства
     * типа double.
     */
    double x; // абсцисса точки
    double y; // ордината точки

    // Метод выводящий точку на экран в формате: (x;y)
    void printPoint() {
        System.out.print("("+x+";"+y+")");
    }

    // Метод перемещающий точку в указанное положение
    void setPoint(double a, double b) {
        x = a;
        y = b;
    }

    /* Далее мы перегрузим предыдущий метод, т.е. создадим метод
     * с тем же именем, но с другим набором аргументов. Пусть метод теперь
     * имеет один аргумент и его значение передаёт обоим своствам точки.
     * С помощью этого метода, соответсвенно, точку можно будет передвигать
     * на биссектрису I и III координатных четвертей.
     */
    void setPoint(double a) {
        x = a;
        y = a;
    }

    // Метод для задания новых координат точки с клавиатуры
    void inputPoint() {
        Scanner inp = new Scanner(System.in);
        System.out.print("Введите абсциссу: ");
        double a = inp.nextDouble();
        System.out.print("Введите ординату: ");
        double b = inp.nextDouble();
        /* В создаваем методе мы вызываем другой существующий в классе метод.
         * Это допустимо и удобно.
         */
        setPoint(a,b);
    }

    /* Метод проверяющий, совпадают ли две точки. Метод работает
     * с двумя точками, но свойства той, для которой метод вызывается,
     * доступны непосредственно, а свойства второй точки, передаваемой
     * через аргумент — доступны как имя_объекта.имя_свойства
     */
    boolean isSame(Point a) {
        if(x == a.x && y == a.y) {
            return true;
        } else {
            return false;
        }
    }

    // Метод вычисляющий расстояние между двумя точками
    double getDistance(Point a) {
        return Math.sqrt( Math.pow(x-a.x, 2) + Math.pow(y-a.y, 2) );
    }

    // Метод вычисляющий расстояние от указанной точки до начала координат
    double getRadius() {
        Point a = new Point(0,0);
        return this.getDistance(a);
    }

    /* Конструктор по умолчанию, его можно не описывать явно, тогда объект
     * будет создаваться, а его свойства будут получать те значения
     * по умолчанию, что предусмотрены типом данных. Для int это 0, для
     * double это 0.0 и пр.
     */
    Point() {
        x = 0;
        y = 0;
    }

    /* Второй конструктор с двумя аргументами, он поможет создавать точку
     * с нужными координатами, сразу указывая их при создании объекта.
     */
    Point(double x, double y) {
        /* Неудобные имена параметров, перекрывающие имена свойств, здесь
         * выбраны специально, чтобы показать, что столь неудачный подбор
         * имён не создаёт неразрешимой проблемы. Дело в том, что в Java
         * имеется специальное слово this, которое заменяет имя того объекта,
         * для которого был вызыван выполняем метод или того объекта, который
         * только создаётся конструктором. Соответсвенно, this.x это абсцисса
         * (первое свойство) создаваемого объекта.
         */
        this.x = x;
        this.y = y;
    }

}