— Привет, Амиго!

— Привет, Элли!

— Сегодня я подробно расскажу тебе, что такое классы.

Объяснение номер 1. Начну с аналогии. Все вещи в физическом мире состоят из атомов. Атомы могут быть разных типов: водород, кислород, железо, уран, … Комбинируя такие атомы можно создавать различные молекулы, вещества и предметы.

— Атомы в свою очередь тоже имеют некоторую внутреннюю структуру. Внутри них содержатся электроны и ядро: протоны и нейтроны.

— Да, я имею общее представление об устройстве атомов. Я же робот.

— Так вот, в мире Java все очень похоже. Программы состоят из объектов, которые бывают разных типов (классов). Различные классы в свою очередь имеют различные внутренние структуры: переменные и методы.

— Если рассмотреть программу в целом, то объекты – это блоки, из которых состоит программа. А классы – это типы этих блоков. Блоки разных типов являются объектами разных классов.

— Вроде ясно.

— Объяснение номер 2. Когда нам нужен новый тип объектов, мы создаем новый класс, и внутри него описываем нужное нам поведение этих объектов.

— Что-то как-то уж слишком размыто это звучит. Вроде и понятно, но ничего конкретного.

— С точки зрения внутренней структуры, класс состоит из методов класса, которые что-то делают и переменных класса, в которых эти методы хранят различные данные.

— Т.е. если очень просто, то класс – это набор методов?

— Почти, точнее будет сказать, что класс – это группа методов, работающих вместе, и переменные, в которых эти методы хранят различные значения, которыми пользуются сообща.

— Ага. И чтобы создать новый класс нам нужно написать эти методы…

— Да. А также решить, какие общие переменные есть у различных методов, и вынести эти переменные из метода в класс: сделать переменные метода переменными класса.

— Создание класса происходит примерно по такой схеме:

1. Программист решает, какие еще объекты ему нужны.

2. Программист разбивает эти объекты на различные типы в зависимости от того, что они должны делать.

3. Для каждого типа программист пишет свой отдельный класс.

4. В классе он объявляет нужные методы и переменные.

5. В каждом методе пишутся команды, чтобы метод делал то, что хочет от него программист.

6. Класс готов, можно создавать его объекты.

— Круто! Интересная схема. Надо будет запомнить

— Запоминай – пригодится. Подход к программированию, при котором программа разбивается на объекты, называется «Объектно-Ориентированное Программирование (ООП)».

— Java – это классический пример ООП подхода: в Java объектами является всё.

— Изучение Java состоит из двух больших задач: учимся писать свои классы, учимся использовать чужие классы. Сегодня мы начнем с самого простого. Будем учиться писать простенькие классы и, конечно, создавать их объекты. Объекты часто еще называют экземплярами классов. Это синонимы: правильно и так и так.

— Понятно.

— Если подытожить всё, что я сказала, то можно сказать, что класс – это мини программа: набор данных и функции, которые что-то с этими данными делают. Важной особенностью классов является возможность создавать экземпляры этих классов – объекты.

— Для того, чтобы создать объект класса, в коде надо написать «new имя_класса()». Примеры:

Примеры:
Cat cat = new Cat();
Reader reader = new BufferedReader(new InputStreamReader(System.in));
InputStream is = new FileInputStream(path);

— У объекта класса есть две интересные особенности:

Первая. Каждый объект класса хранит свою собственную копию переменных класса. Т.е. если в классе объявлены переменные «x,y» и создано 10 объектов такого класса, то в каждом объекте будут свои переменные. Изменение переменных одного объекта не влияет на переменные другого объекта.

Вторая. При создании объекта, в него можно передавать различные параметры. Это так называемые «стартовые значения». Это почти как дать имя при рождении. Многие объекты не могут быть созданы, если в них не передать такие параметры.

— Немного понятно. А что ты говорила про переменные класса?

— У каждого объекта есть его копия данных – переменных класса.

Код на Java Вывод на экран:
Cat cat1 = new Cat();
cat1.name = "Vaska";

Cat cat2 = new Cat();
cat2.name = "Mashka";

System.out.println(cat1.name);
System.out.println(cat2.name);
Vaska
Mashka