Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 6. Создание пользовательских классов в Jav...doc
Скачиваний:
25
Добавлен:
10.11.2019
Размер:
108 Кб
Скачать
☆

Программирование на Java (4 курс) 8 / 8

Тема 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.

Для того чтобы использовать конструкто­ры или написать собственные, важно понимать их характерис­тики:

  1. они объявляются общими (public);

  2. У них нет типа; они всегда возвращают ссылку к экземпляру класса;

  3. они всегда имеют точно такие же имена, что и класс, включая регистры букв;

  4. они могут иметь 0 или более параметров; каждый из парамет­ров должен получить свой тип;

  5. в классе может быть более одного конструктора; они имеют одно имя, но система различает их по количеству и типу параметров;

  6. код внутри конструктора инициализирует переменные экземпляра объекта со значениями параметров, отправленных в мо­мент вызова конструктора.

Виды конструкторов

  1. Самый простой конст­руктор не содержит параметров и не имеет никакого кода. Такой конструктор инициализирует значения полей, равные 0.

Пример:

public Point() { }

Если в определении класса разработчик не указывает конструкторы, то система сама предоставит по умолчанию конст­руктор, подобный ука­занному выше. Код для такого конструктора не виден, но его, тем не менее, можно использовать.

  1. Рассмотрим второй пример конструктора. Он также не имеет параметров. Результат тот же самый, но в данном случае поля явно инициализиро­ваны со значением, равным 0.

public Point()

{

x = 0;

y = 0;

}

  1. Рассмотрим третий пример конструктора. У этого конструктора есть два параметра. Значения этих параметров используются для инициализации полей 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;

}