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

Программирование на 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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]