Классы и объекты в Java
- Что такое объект и класс в Java?
- Как создать класс в Java
- Создание объекта в Java
- Присваивание переменным ссылок на объекты
- Добавляем методы в класс
1. Что такое объект и класс в Java?
Класс в Java - это шаблон для создания объекта, а объект - это экземпляр класса. Класс определяет структуру и поведение, которые будут совместно использоваться набором объектов. Класс содержит переменные и методы, которые называются элементами класса, членами класса. Он составляет основу инкапсуляции в Java. Каждый объект данного класса содержит структуру и поведение, которые определены классом. Иногда объекты называют экземплярами класса.
Методы используются для описания того, что объект класса умеет делать или что можно с ним сделать. Переменные - для описания свойств или характеристик объекта.
Рассмотрим картинку, приведенную ниже. Объявлен класс Student
, у которого есть переменные name
и rollNo
, а также методы setName()
и setRollNo()
для установки этих значений. На основе этого класса создано несколько объектов: Jenna, John, Maria, James. У каждого объекта, то есть студента, есть name
и rollNo
, но они разные.
2. Как создать класс в Java
Рассмотрим как создать класс в языке Java. Упрощенная общая форма определения класса:
class ИмяКласса{
тип переменнаяЭкземпляра1;
тип переменнаяЭкземпляра2;
// ...
тип переменнаяЭкземпляраN;
тип имяМетода 1 ( список параметров) {
// тело метода
}
тип имяМетода2 (список параметров) {
// тело метода
}
…
тип имяМетодаN (список параметров ) {
// тело метода
}
}
После ключевого слова class пишется имя класса. В теле класса объявляются переменные и методы класса. Их может быть сколько угодно.
Опишем класс для объекта Box
(коробка). У коробки есть три главные характеристики: ширина, высота и глубина, описанные с помощью переменных:
public class Box {
double width;
double height;
double depth;
}
3. Создание объекта в Java
Объявление класса создает только шаблон, но не конкретный объект. Чтобы создать объект класса Вох
в Java, нужно воспользоваться оператором наподобие следующего:
Вох myBox = new Вох();
При создании экземпляра класса, создается объект, который содержит собственную копию каждой переменной экземпляра, определенной в данном классе.
Создание объектов класса представляет собой двух этапный процесс:
- Объявление переменной типа класса. Эта переменная не определяет объект. Она является лишь переменной, которая может ссылаться на объект:
Вох myBox;
- Создание объекта. С помощью оператора new динамически (то есть во время выполнения) резервируется память для объекта и возвращается ссылка на него:
myBox = new Вох();
После объявления объекта класса Box
, всем переменным класса присваивается значение по умолчанию для заданного типа. Для того чтобы обратиться к переменной класса и изменить ее или получить значение, используется имя переменной объекта:
public class BoxExample1 {
public static void main(String[] args) {
Box myBox = new Box();
// присвоить значение переменным экземпляра mybox
myBox.width = 10;
myBox.height = 20;
myBox.depth = 15;
// рассчитать объем параллелепипеда
double volume = myBox.width * myBox.height * myBox.depth;
System.out.println("Объем равен " + volume);
}
}
В следующем примере объявляется два объекта класса Box
и каждому устанавливаются свои значения. Изменения в переменных экземпляре одного объекта не влияют на переменные экземпляра другого.
public class BoxExample7 {
public static void main(String[] args) {
Box myBox1 = new Box();
Box myBox2 = new Box();
double volume;
// присвоить значения переменным экземпляра myBox1
myBox1.width = 10;
myBox1.height = 20;
myBox1.depth = 15;
//присвоить другие значения переменным экземпляра myBox2
myBox2.width = 3;
myBox2.height = 6;
myBox2.depth = 9;
// рассчитать объем первого параллелепипеда
volume = myBox1.width * myBox1.height * myBox1.depth;
System.out.println("Объем равен " + volume);
// рассчитать объем второго параллелепипеда
volume = myBox2.width * myBox2.height * myBox2.depth;
System.out.println(" Объем равен " + volume);
}
}
4. Присваивание переменным ссылок на объекты
Возможна ситуация, когда две переменные указывают на один и тот же объект в памяти:
Рассмотрим как это происходит на следующем примере.
При объявлении переменной b1
создается новый объект в памяти. При объявлении переменной b2
, вместо создания нового объекта, переменной присваивается ссылка на объект b1
. Далее объекту, на который указывает переменная b1
, присваиваются значения 10, 20, 30. А ширине объекта, на который указывает переменная b2
, присваивается значение 3:
public class BoxExample6 {
public static void main(String[] args) {
Box1 b1 = new Box1();
Box1 b2 = b1;
b1.width = 10;
b1.height = 20;
b1.depth = 15;
b2.width = 3;
System.out.println("Width: " + b1.width);
System.out.println("Width: " + b2.width);
}
}
Но обе переменные указывают на один и тот же объект, поэтому результат выполнения этой программы будет:
Width: 3.0
Width: 3.0
5. Добавляем методы в класс
Кроме переменных класс может содержать методы. В следующем примере в класс Box
добавляется два метода: getVolume()
- для вычисления объема коробки и setDim()
- для установки размера коробки. Обратите внимание, что теперь мы объявляем методы нестатические (без ключевого слова static). В обоих методах мы имеем доступ к переменным класса.
public class Box {
double width;
double height;
double depth;
/**
* Подсчитать объем коробки
*
* @return Объем
*/
double getVolume() {
return width * height * depth;
}
/**
* Установить размер коробки
*
* @param w - ширина
* @param h - высота
* @param d - глубина
*/
void setDim(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
}
В следующей программе создаются два объекта класса Box
и вместо инициализации каждой переменной класса, как мы делали ранее, вызывается метод setDim()
, куда передаются необходимые значения для ширины, высоты и глубины. Таким образом программа становится более компактной. Нестатический метод класса всегда вызывается для какого-то объекта. Аналогично, для подсчета объема коробки вызываем метод getVolume()
для каждого объекта отдельно:
public class BoxExample2 {
public static void main(String[] args) {
Box myBox1 = new Box();
Box myBox2 = new Box();
myBox1.setDim(10, 20, 15);
myBox2.setDim(1, 5, 5);
System.out.println("Объем: " + myBox1.getVolume());
System.out.println("Объем: " + myBox2.getVolume());
}
}

Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.