В этой теме вы познакомились с понятием класс, научились создавать объекты класса и работать с полями объектов.
class Hamster { //имя объекта
// Поля описывают обект (атрибуты)
String name = "Байт"; // Имя
int age = 2; // Возраст
String color = "Рыжий"; // Цвет
int weigth = 350; // Вес в граммах
// метод класса
void eat(int foodWeight) { //Методы меняют значения полей объекта, поэтому у всех методов тип возвращаемого значения void
weight = weight + foodWeight; // меняет значение поля weight
}
}
<aside> 💡 Каждый новый класс по-сути новый тип данных. Поэтому имя класса становится типом переменной.
</aside>
Объекты — переменные с типом данных образованным созданием класса.
Для того, чтобы присвоить переменной bite значение нового объекта, необходимо использовать конструктор, без new не обойтись.
public static void main(String[] args) {
Hamster bite; // Объявили переменную с типом Hamster
Hamster bite = new Hamster(); // Присвоили переменной значение нового объекта-хомяка
}
Взаимодействие с новым объектом происходит через его методы. Например, bite.runInWheel().
Hamster bite = new Hamster(); // создание переменной bite типа(класса) Hamster
bite.runInWheel(); // Вызов метода runInEhell объекта bite
bite.name = "Хомка";// меняем значение поля name
System.out.println("Вес хомяка после пробежки: " + bite.weight)// получаем значение поля weight
Обращение к полям и методам объекта происходит с помощью точечной нотации bite.weight , bite.runInWheel();
<aside> 💡 Важно запомнить: когда мы меняем свойства объекта, то на классе эти изменения не отразятся.
</aside>
Внутри каждого объекта хранится своя копия значений полей. Это значит, что если изменить свойства одного объекта, это не повлияют на остальные.
Конструктор создаёт новые объекты класса. Конструктор по умолчанию Hamster bite = new **Hamster()**; ****позволяет создавать объекты с заданными заранее значениями полей. Для того, чтобы создавать объекты с разными значениями полей используются конструкторы с параметрами.
Конструкторы с параметрами объявляется внутри класса. Имена у них будут совпадать. Главное, чтобы их сигнатуры — количество аргументов — отличались. Тогда программа сможет понять, какой именно конструктор вызвать.
class Hamster {
// Объявили поля, но не присвоили им значения
String name; // Имя
int age; // Возраст
int weight; // Вес в граммах
String color; // Цвет
// Конструктор № 1 создаёт только рыжих хомяков
Hamster(String hamsterName, int hamsterAge, int hamsterWeight) {
name = hamsterName;// присваеваем полю объекта значение полученное из конструктора
age = hamsterAge;// присваеваем полю объекта значение полученное из конструктора
weight = hamsterWeight;// присваеваем полю объекта значение полученное из конструктора
color = "Рыжий"; // Закрепили за переменной постоянное значение
}
// Конструктор № 2 создаёт хомяков разного цвета
Hamster(String hamsterName, int hamsterAge, int hamsterWeight, String hamsterColor) {
name = hamsterName;// присваеваем полю объекта значение полученное из конструктора
age = hamsterAge;// присваеваем полю объекта значение полученное из конструктора
weight = hamsterWeight;// присваеваем полю объекта значение полученное из конструктора
color = hamsterColor;// присваеваем полю объекта значение полученное из конструктора
}
}