- •Тема 5. Создание пользовательских классов в Java
- •Тема 5. Создание пользовательских классов
- •Поля (переменные экземпляра)
- •Конструкторы
- •У них нет типа; они всегда возвращают ссылку к экземпляру класса;
- •Самый простой конструктор не содержит параметров и не имеет никакого кода. Такой конструктор инициализирует значения полей, равные 0.
- •Void init(int a,int b) // модифицирующий метод, изменяющий
- •? Упражнения
Программирование на Java
(4 курс)
Тема 5. Создание пользовательских классов в Java
Тема 5. Создание пользовательских классов
Любой класс задается набором присущих ему переменных, причем у каждого объекта данного класса свои копии переменных. Поведение и интерфейс класса задают методы, работающие с хранящимися в объектах данными. Метод - это сообщение о том, что над объектом надо выполнить какую-либо операцию. Эти сообщения во многом напоминают процедуры в старых языках.
Для определения класса необходимы три основных компонента:
поля (переменные экземпляра);
конструкторы;
методы.
Класс, определенный пользователем, должен получить имя. Для того чтобы использовать такой класс в программе, его нужно объявить как общий (public). Код, определяющий класс, должен размещаться в фигурных скобках, следующих за объявлением.
Синтаксис определения класса:
public class <Имя_класса>
{
объявление полей (переменных экземпляра);
объявление конструкторов;
объявление методов;
}
Пример:
public class Point
{
…………
}
Рассмотрим каждый из трех компонентов в определении класса.
Поля (переменные экземпляра)
Чтобы поля были доступны без использования методов, их объявляют открытыми (общими) с помощью ключевого слова public.
Пример (в классе Point1 объявляется два открытых поля – x и y – координаты точки):
public class Point1
{
public int x,y;
}
Термин "инкапсуляция" означает, что к некоторым частям объекта нет непосредственного доступа снаружи. Например, как правило, желательно, чтобы поля были доступны только с помощью методов. Для того чтобы ввести инкапсуляцию, поля объявляются закрытыми (частными) с помощью ключевого слова private.
Пример (в классе Point2 объявляется два закрытых поля – x и y – координаты точки):
public class Point2
{
private int x,y;
}
Конструкторы
Для того чтобы создать экземпляры класса, нужны конструкторы.
Конструктор – это метод класса, который инициализирует новый объект после его создания.
Если конструктор определен, то он автоматически вызывается сразу после создания объекта перед завершением оператора new.
Для того чтобы использовать конструкторы или написать собственные, важно понимать их характеристики:
они объявляются общими (public);
У них нет типа; они всегда возвращают ссылку к экземпляру класса;
они всегда имеют точно такие же имена, что и класс, включая регистры букв;
они могут иметь 0 или более параметров; каждый из параметров должен получить свой тип;
в классе может быть более одного конструктора; они имеют одно имя, но система различает их по количеству и типу параметров;
код внутри конструктора инициализирует переменные экземпляра объекта со значениями параметров, отправленных в момент вызова конструктора.
Виды конструкторов
Самый простой конструктор не содержит параметров и не имеет никакого кода. Такой конструктор инициализирует значения полей, равные 0.
Пример:
public Point() { }
Если в определении класса разработчик не указывает конструкторы, то система сама предоставит по умолчанию конструктор, подобный указанному выше. Код для такого конструктора не виден, но его, тем не менее, можно использовать.
Рассмотрим второй пример конструктора. Он также не имеет параметров. Результат тот же самый, но в данном случае поля явно инициализированы со значением, равным 0.
public Point()
{
x = 0;
y = 0;
}
Рассмотрим третий пример конструктора. У этого конструктора есть два параметра. Значения этих параметров используются для инициализации полей x и y:
public Point(int init_x, int init_y)
{
x = init_x;
y = init_y;
}
Пример определения класса Point, включающего объявления полей и конструкторов:
public class Point // заголовок класса
{
public int x,y; // объявление полей
public Point() // объявление конструктора без параметров
{
x = 0;
y = 0;
}
public Point(int init_x, int init_y) // объявление конструктора
// с параметрами
{
x = init_x;
y = init_y;
}
}
Класс может быть написан, сохранен и скомпилирован независимо от программы, в которой он используется. Так же, как и в случае с программными классами, имя файла, в котором сохранен класс, должно точно совпадать с именем класса (включая прописные буквы) и должно иметь расширение Java. Класс, написанный пользователем, может быть использован в любой программе, в которой он может потребоваться, если он хранится в той же папке, что и программа. Посмотрите на полный код, который будет содержаться в файле СирЗ Java, где класс теперь включает Метод increaseSeedCount().
Пример тестовой программы, использующей класс Point:
class PointCreate
{
public static void main(String args[])
{
Point p1 = new Point();
System.out.println("x = "+p1.x+"\t y = "+p1.y);
Point p2 = new Point(10,20);
System.out.println("x = "+p2.x+"\t y = "+p2.y);
}
}
Результат работы программы:
0 0
10 20
Методы
Без методов класс имеет мало смысла, но уже можно создать экземпляры данного класса.
Пример вызова конструкторов для создания объектов класса Point:
Point myPoint = new Point();
Point myPoint = new Point(3,5);
Чтобы пользоваться созданными объектами, необходимы методы.
Методы делятся на две категории:
методы доступа (Accessor) – это методы "получения" (get methods), которые возвращают значение поля (переменной экземпляра), не изменяя его;
модифицирующие методы (Mutator) – это "установочные" методы (set methods), которые позволяют изменять значение поля (переменной экземпляра).
Объявление методов
При объявление методов задается тип возвращаемого им результата и список параметров.
Синтаксис объявления методов:
[public] <тип> <имя_метода> ([список формальных параметров])
{
тело метода;
}
Здесь
public – ключевое слово, которое объявляет метод открытым (общим); такой метод можно использовать программе вне определения класса или в других программах;
тип – тип возвращаемого результата; тип может быть простым типом данных, ссылкой или пустым, если метод ничего не возвращает;
имя_метода – любой допустимый идентификатор, не совпадающий ни с одним из имен уже имеющихся в текущей области видимости;
список формальных параметров – последовательность пар тип-идентификатор, разделенных запятыми; если параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки.
Пример (класс Point1 содержит открытые поля, два конструктора и метод init):
public class Point1 // заголовок класса
{
public int x,y; // объявление полей х,у – открытые поля
public Point1() // объявление конструктора без параметров
{
x = 0;
y = 0;
}
public Point1(int init_x, int init_y) // объявление конструктора
// с параметрами
{
x = init_x;
y = init_y;
}