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

Представление методов

Как упоминалось в начале этого раздела, классы обычно состоят из двух видов компонент – переменных экземпляра и методов. Общая форма метода такова:

type name(parameter-list) {

// тело метода

}

Здесь type определяет тип данных, возвращаемых методом. Это может быть любой допустимый тип, включая типы классов. Если метод не возвращает значения, его возвращаемый тип должен быть void. Именем (name) метода может быть любой допустимый идентификатор, но отличающийся от тех, что уже используются другими элементами в пределах текущей области действия имен. Рarameter-list – это последо­вательность пар тип-идентификатор, разделенных запятыми. Параметры – это, по существу, переменные, которые принимают значения аргументов, посылаемых методу во время его вызова. Если метод не имеет параметров, то список параметров будет пуст.

Методы, у которых тип возвращаемого значения отличен от void, возвра­щают значение вызывающей подпрограмме, используя оператор return в форме return value, где value – возвращаемое значение.

Добавление метода к классу Box

Методы обычно определяют поведение объекта и обеспечивают доступ к экземплярным переменным, которые определены в классе. Фактически, именно методы определяют интерфейс с большинством клас­сов. Они позволяют разработчику класса скрывать специфическое размеще­ние внутренних структур данных за более ясными абстракциями метода.

Оценивая предыдущие програм­мы, можно отметить, что вычисление объема блока было бы лучше выполнять в Box-классе, а не в классе BoxDemo, хотя бы потому, что объем блока зависит от его размеров, а размеры определены в Вох-классе. Для этого нужно добавить метод в класс Вох:

// Эта программа включает метод внутрь класса-Box.

class Box {

double width;

double height;

double depth;

// показать объем блока

void volume () {

System.out.println ("Объем равен " + width*height*depth);

}

}

class ВохDemoЗ {

public static void main (String args[]) {

Box myboxl = new Box();

Box mybox2 = new Box();

// присвоить значения переменным экземпляра mybox1

myboxl.width = 10;

myboxl.height = 20;

myboxl.depth = 15;

// присвоить другие значения переменным экземпляра mybox2

mybox2.width = 3;

mybox2.height = 6;

mybox2.depth = 9;

// показать объем первого блока

myboxl.volume();

// показать объем второго блока

mybox2.volume();

}

}

Эта программа генерирует вывод, который является таким же, как в предыдущей версии.

Объем равен 3000.0

Объем равен 162.0

Рассмотрим подробнее две следующие строки программы:

mybox1.volume () ;

mybox2.volume () ;

Первая строка включает метод volume() объекта mybox1. Точнее, она обраща­ется к методу volume() объекта mybox1, используя имя объекта, за которым следует "точка". Таким образом, обращение к mybox1.volume() ото­бражает объем блока, определенного переменкой mybox1, а обращение к mybox2.volume() отображает объем блока, определенного переменной mybox2.

В общем случае ме­тод – это способ реализации подпрограмм в языке Java. Когда выполняется myboxl.volume(), исполняющая система Java передает управление коду, определенному внут­ри метода volume(). После того как операторы внутри volume() выполнятся, управление возвращается в вызывающую программу, и передается строке кода, следующей за вызовом.

При этом следует обратить внимание на то, что внутри метода volume(): переменные width, height и depth указаны без предшествующих им имен объектов и "точечных" операций. Иными словами, когда метод использует переменную экземпляра, которая определена в его классе, он указывает ее прямо, без явной ссылки на объект и использования "точечной" операции. Это возможно, так как ме­тод всегда вызывается из некоторого объекта его класса, т.е. объект известен и внутри метода нет не­обходимости указывать объект второй раз. Это означает, что переменные width, height и depth внутри метода volume () неявно ссылаются на копии переменных, находящихся в объекте, который вызывает этот метод.

Итак, когда к переменной экземпляра обращается код, который не является частью класса, в котором данная переменная определена, это должно быть сделано через объект, при помощи "точечной" операции. Однако, когда к такой переменной обращается код, являющийся частью ее класса, на эту переменную можно ссылаться прямо (т. е. без квалификации ее имени име­нем объекта). Этот же принцип относится и к методам.

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