Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 6. Введение в классы 147

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

myboxl.width = 10; myboxl.height = 20; myboxl.depth = 15;

Хотя этот код работает, однако возникает некоторое беспокойство. Во-пер­вых, он кажется каким-то не изящным и склонным к ошибкам. Например, легко забыть установку измерений. Во-вторых, в хорошо разработанных Java-программах к переменным экземпляра нужно обращаться только через методы, определенные их классом. В будущем вы сможете изменять поведе­ние метода, но вы не можете изменять поведение установленной перемен­ной экземпляра.

Таким образом, лучший подход к установке размеров блока состоит в том, чтобы создать метод, который берет измерения блока в свои параметры и походящим образом устанавливает каждую переменную экземпляра. Эта концепция реализована следующей программой:

// Эта программа использует параметризованный метод.

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

// вычислить и возвратить объем double volume () {

return width * height * depth; }

// установить размеры блока

void setDim(double w, double h, double d) {

width = w;

height = h;

depth = d; } }

class BoxDemoS {

public static void main(String args[]) { Box myboxl = new Box(); Box mybox2 = new Box(); double vol;

// инициализировать каждый блок myboxl.setDim(10, 20, 15); mybox2.setDim(3, 6, 9);

148 ^ Часть I. Язык Java

// получить объем первого блока

vol = myboxl.volume();

System.out.println("Объем равен " + vol);

// получить объем второго блока vol = mybox2.volume();

System.out.println("Объем равен " + vol); } }

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

myboxl. setDim( 10, 20, 15);

выполняется, 10 копируется в параметр w, 20 копируется в h и 15 копируется в а. Внутри метода setoimo значения w, h и d затем назначаются перемен-

ным width, height И depth, соответственно.

Для многих читателей — особенно тех, кто имеет некоторый опыт програм­мирования в C/C++ — концепции, представленные в предшествующих раз­делах, конечно знакомы. Однако если такие понятия, как вызовы метода, аргументы и параметры являются для вас новыми, то, прежде чем двигаться дальше, желательно потратить некоторое время на эксперименты. Концеп­ции вызова метода, параметры и возврат значений фундаментальны для Java-программирования.

Конструкторы

При создании экземпляров весьма утомительно инициализировать все пе­ременные в классе. Даже, когда вы добавляете функции для организации удобств, подобные setoimo, было бы проще и быстрее делать всю установку во время первоначального создания объекта. Поскольку требования инициа­лизации являются достаточно общими, Java разрешает инициализацию объ­ектов в момент их создания. Эта автоматическая инициализация выполняет­ся с помощью конструктора.

Конструктор инициализирует объект после его создания. Он имеет такое же имя, как класс, в котором он постоянно находится и синтаксически подо­бен методу. Если конструктор определен, то он автоматически вызывается сразу же после того, как объект создается, и прежде, чем завершается вы­полнение операции new. Конструкторы выглядят немного странными, пото­му что не имеют ни спецификатора возвращаемого типа, ни даже специфи­катора void. Происходит это от того, что неявным возвращаемым типом конструктора класса является тип самого класса. Работа конструктора за­ключается в том, чтобы инициализировать внутреннее состояние объекта

Соседние файлы в папке JavaLit