Видеозаписи двух уроков:

Дополнительные материалы:

  • Статья про то как выглядят поля и методы
  • Курс на stepik - вероятно лекции около темы “Объявление класса”

Ниже приведен пример класса описывающего натуральное число:

public class NaturalValue {
    int value;

    NaturalValue(int value) {
        // В конструкторе никто не мешает проверять аргументы на корректность и как-то их изменять (исправлять)
        if (value < 1) {
            this.value = 1;
        } else {
            this.value = value;
        }
    }
    
    NaturalValue() {
        // Это конструктор который вызывается без аргуметов, т.е. вот так:
        // NaturalValue v = new NaturalValue();
        // т.е. конструкторов может быть несколько (они отличаются набором аргументов)
        // Java умная и поймет какой вызывается - на базе того какие аргументы передаются в конструктор из main-функции
        // это называется "перегрузка" конструкторов
        // так же может быть и "перегрузка" методов с одинаковыми названиями но разными аргументами 
        this.value = 1;
    }

    void fix() {
        // А что если мы хотим часто менять наше натуральное число?
        // Что если оно перестанет быть натуральным?
        // В каждой функции писать if подобный тому что в конструкторе и setter-е? Утомительно и не красиво!
        // Давайте просто сделаем функцию fix()="поправь натуральное число если это требуется" и будем ее вызывать отовсюду
        // в т.ч. из конструктора можно было бы и из setter-а
        if (value <= 1) {
            value = 1;
        }
    }

    void add(int value) {
        this.value += value;
        this.fix(); // если вдруг мы вычли слишком много и ушли в минус (или до нуля) - поправляем
    }

    void add(NaturalValue x) { // методы и функции могут быть "ПЕРЕГРУЖЕНЫ" (overloaded)
        // т.е. их может быть несколько с одинаковым названием (см. add выше)
        // но в момент вызова Java поймет какую функцию выполнять,
        // т.к. они вызываются с разными типами аргументов.
        // Обратите внимание что мы обращаемся к нашему полю (this.value) и к чужому полю (x.value)
        this.value += x.value;
        this.fix(); // на самом деле это не обязательно т.к. натуральное+натуральное=натуральное, но так спокойнее и надежнее...
    }

    NaturalValue plus(int x) {
        return new NaturalValue(this.value + x); // нужен ли тут вызов fix?
    }

    NaturalValue plus(NaturalValue x) {
        // обратите внимание что мы обращаемся к нашему полю (this.value) и к чужому полю (x.value)
        return new NaturalValue(this.value + x.value); 
    }
}

Задание

Задание на дом - придумать и создать свой класс что-то олицетворяющий - например 3D точка/3D вектор/прямоугольник, собака/кошка/единорог, дворник/строитель/АСФАЛЬТОУКЛАДЧИК и т.д..

Если ваш класс будет похож на чей-то другой - я буду что-то подозревать… Поэтому рекомендуется придумать что-то оригинальное :)

В вашем классе должно быть:

0) По мере написания - в файле Main с public class Main и с public static void main(String[] args) проверяйте что ваши наработки работают, т.е. демонстрируйте там все ваши наработки - все конструкторы и все методы.

1) Конструктор без аргументов (создает нейтральный вариант объекта по умолчанию).

2) Основной конструктор с ключевыми параметрами описывающими объект.

4) Хотя бы три поля.

5) Хотя бы три метода.

6) Хотя бы один метод должен уметь взаимодействовать с другим объектом этого же класса. Например метод “играть” с другой кошкой для кошки, и в зависимости от их суммарной веселости - напечатать пропорционально много веселых “мяу” в консоль.

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

Обратите внимание что выше есть пример с комментариями (прочитайте их!) и ссылки - это должно помочь.