Простой класс

Изучение классов начнем с простого примера. Ниже приведен код класса Box (Параллелепипед), который определяет три переменных экземпляра: width (ширина), height (высота) и depth (глубина). В настоящий момент Box не содержит никаких методов (но вскоре мы добавим в него метод).

class Box {
double width;
double height;
double depth;
}

Как уже было сказано, класс определяет новый тип данных. В данном случае новый тип данных назван Box. Это имя будет использоваться для объявления объектов типа Box. Важно помнить, что объявление class создает только шаблон, но не действительный объект. Таким образом, приведенный код не приводит к появлению никаких объектов типа Box.

Чтобы действительно создать объект Box, нужно использовать оператор, подобный следующему:

Box mybox = new Вох();
// создание объекта mybox типа Box

После выполнения этого оператора mybox станет экземпляром класса Box. То есть он обретет "физическое" существование. Но пока можете не задумываться о нюансах этого оператора.

Повторим еще раз: при каждом создании экземпляра класса мы создаем объект, который содержит собственную копию каждой переменной экземпляра, определенной классом. Таким образом, каждый объект Box будет содержать собственные копии переменных экземпляра width, height и depth. Для получения доступа к этим переменным применяется операция точки (.). Эта операция связывает имя объекта с именем переменной экземпляра. Например, чтобы присвоить переменной width объекта mybox значение 100, нужно было бы использовать следующий оператор:

mybox.width = 100;

Этот оператор указывает компилятору, что копии переменной width, хранящейся внутри объекта mybox, нужно присвоить значение, равное 100. В общем случае операцию точки используют для доступа как к переменным экземпляра, так и к методам внутри объекта.

Ниже приведена полная программа, в которой используется класс Box.

/* Программа, использующая класс Box.
Назовите этот файл BoxDemo.java
*/
class Box {
double width;
double height;
double depth;
}
// Этот класс объявляет объект типа Box.
class BoxDemo {
public static void main(String args[]) {
Box mybox = new Box () ;
double vol;
// присваивание значений переменным экземпляра mybox
mybox.width = 10;
mybox.height = 20;
mybox.depth = 15;
// вычисление объема параллелепипеда
vol = mybox.width * mybox.height * mybox.depth;
System.out.println("Объем равен " + vol);
}
}

Файлу этой программы нужно присвоить имя BoxDemo. j ava, поскольку метод main () определен в классе, названном BoxDemo, а не Box. Выполнив компиляцию этой программы, вы убедитесь в создании двух файлов . class: одного для Box и одного для BoxDemo. Компилятор Java автоматически помещает каждый класс в отдельный файл с расширением .class. В действительности классы Box и BoxDemo не обязательно должны быть объявлены в одном и том же исходном файле. Каждый класс можно было бы поместить в отдельный файл, названный соответственно Box. j ava и BoxDemo. j ava.

Чтобы запустить эту программу, нужно выполнить файл BoxDemo. class. В результате будет получен следующий вывод:

Объем равен 3000.0

Как было сказано ранее, каждый объект содержит собственные копии переменных экземпляра. Это означает, что при наличии двух объектов Box каждый из них будет содержать собственные копии переменных depth, width и height. Важно понимать, что изменения переменных экземпляра одного объекта не влияют на переменные экземпляра другого. Например, в следующем программе объявлены два объекта Box:

// Эта программа объявляет два объекта Box.
class Box {
double width;
double height;
double depth;
}
class BoxDemo2 {
public static void main(String args[]) {
Box myboxl = new Box() ;
Box mybox2 = new Box () ;
double vol;
// присваивание значений переменным экземпляра myboxl
myboxl.width = 10;
myboxl.height =20;
myboxl.depth = 15;
// присваивание других значений переменным экземпляра mybox2
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9 ;
// вычисление объема первого параллелепипеда
vol = myboxl.width * myboxl.height * myboxl.depth;
System.out.println("Объем равен " + vol);
// вычисление объема второго параллелепипеда
vol = mybox2.width * mybox2.height * mybox2.depth;
System.out.println("Volume is " + vol);
}
}

Эта программа генерирует следующий вывод:

Объем равен 3000.0 Объем равен 162.0

Как видите, данные объекта myboxl полностью изолированы от данных, содержащихся в объекте mybox2.