Объекты


Все в Java находится внутри классов и объектов. Объекты Java содержат состояние, состояние - это переменные, которые сохраняются вместе внутри объекта, мы называем их полями или переменными-членами.

Начнем с примера:

class Point {
    int x;
    int y;
}

Этот класс определил точку со значениями x и y.

Чтобы создать экземпляр этого класса, нам нужно использовать ключевое слово new.

Point p = new Point();

В этом случае мы использовали конструктор по умолчанию (конструктор, который не получает аргументов) для создания Point. Все классы, которые явно не определяют конструктор, имеют конструктор по умолчанию, который ничего не делает.

Мы можем определить наш собственный конструктор:

class Point {
    int x;
    int y;

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

Это означает, что мы больше не можем использовать конструктор по умолчанию . Теперь мы можем использовать только определенный конструктор .new Point()new Point(4, 1)

Мы можем определить более одного конструктора, поэтому Pointих можно создать несколькими способами. Давайте снова определим конструктор по умолчанию.

class Point {
    int x;
    int y;

    Point() {
        this(0, 0);
    }

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

Обратите внимание на использование thisключевого слова здесь. Мы можем использовать его в конструкторе для вызова другого конструктора (чтобы избежать дублирования кода). Это может быть только первая строка в конструкторе.

Мы также использовали thisключевое слово как ссылку на текущий объект, над которым мы работаем.

После того, как мы определились, pмы можем получить доступ к xи y.

p.x = 3;
p.y = 6;

Методы

Теперь мы можем определить методы для Point.

class Point {
    ... // Our code previously
    void printPoint() {
        System.out.println("(" + x + "," + y + ")");
    }

    Point center(Point other) {
        // Returns the center between this point the other point
        // Notice we are using integer, we won't get an accurate value
        return new Point((x + other.x) / 2, (y + other.y) / 2);
    }
}

Государственное и частное

Хотя мы поговорим о модификаторах позже, важно понимать разницу между частными и общедоступными переменными и методами.

При использовании ключевого слова privateперед переменной или методом это означает, что только сам класс может получить доступ к переменной или методу, когда мы его используем, publicэто означает, что каждый может получить к нему доступ. Обычно мы видим конструкторы, определенные как общедоступные, переменные, определенные как частные, и методы разделены, некоторые общедоступные, а некоторые частные.

Упражнение

Напишите новый метод в Point с именем scale, который сделает точку наполовину ближе к (0,0). Так, например, точка (8, 4) после шкалы будет (4, 2).