Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Определение методов

Читайте также:
  1. I. Определение терминов.
  2. I. Определение экономической эффективности
  3. I.1.1. Определение границ системы.
  4. NURBS: Определение
  5. Q: Какое определение спиральной модели жизненного цикла ИС является верным
  6. А) Определение сульфидом натрия.
  7. А. Определение железа в виде роданидного комплекса

Метод определяется, как действительная реализация некоторой операции с объектом.

Синтаксис:

модификатор_доступа тип название_метода (список_параметров)

{

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

}

Метод всегда вызывается относительно одного из объектов соответствующего класса.

При описании метода указывается тип возвращаемого им значения или слово void, затем, через пробел, имя метода, потом, в скобках - список параметров. После этого в фигурных скобках расписывается выполняемый метод.

Методы возвращают значения в вызывающую программу с помощью оператора return.

Описание метода может начинаться с модификаторов public, protected, private, abstract, static, final, synchronized, native. Их мы рассмотрим далее.

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

Преимущества методов:

Конструктор класса (class constructor) – специальный метод, который не имеет возвращаемого значения и имеет то же самое название, что и класс.

- Конструктор выполняется автоматически при создании экземпляра класса, после распределения памяти и обнуления полей, но до начала использования создаваемого объекта.

- Конструктор не возвращает никакого значения. Поэтому в его описании не пишется даже слово void, но можно задать модификаторы доступа.

- Конструктор нельзя наследовать или переопределить в подклассе.

- Тело конструктора может начинаться:

Конструкторов с разными списками параметров может быть несколько.

Если ни один конструктор не определен, компилятор создает конструктор по умолчанию – без параметров. Если явно определен хотя бы один конструктор, то конструктор по умолчанию не создается. Деструкторов, т.е., методов, автоматически вызываемых при удалении объекта, в языке Java нет.

Имя метода, число и типы параметров образуют сигнатуру (signature) метода. Компилятор различает методы не по их именам, а по сигнатурам. Это позволяет записывать разные методы с одинаковыми именами, различающиеся числом и/или типами параметров.

Перед началом работы метода для каждого параметра выделяется ячейка оперативной памяти, в которую копируется значение параметра, заданное при обращении к методу. Мы можем изменить эту копию в методе, но это никак не отразится на фактическом параметре. Такой способ называется передачей параметров по значению.

Рассмотрим пример для передачи по значению.

public class PeredZnachDemo {

int b;

PeredZnachDemo(int n){

b=n;

}

public void peredValue(int a){

a=50;

System.out.println("Значение a = " + a);

}

public static void main(String args[]) {

int a=10;

PeredZnachDemo pass = new PeredZnachDemo(a);

System.out.println("Передача значения\nДо: a = " + a);

pass.peredValue(a);

System.out.println("После: a = " + a);

}

}

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

В примере начальное значение а = 10. В строке:

PeredZnachDemo pass = new PeredZnachDemo(a);

создается объект PeredZnachDemo со значением a, которые будут передаваться функции конструктора. В методе peredValue(a) значение 10 будет передаваться методу, то есть методу передается копия. При определении метода, мы изменяем значение а на 50, но это не будет затрагивать переменную внутри main().

Инкапсуляция

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

Инкапсуляция является одной из основных характеристик объектно-ориентированного языка программирования. Суть инкапсуляции состоит в том, что в рамках класса объединяются переменные и функции и получившийся объект рассматривается как единое целое.

Кроме того, существует возможность назначить права доступа к объектам класса и/или составным частям объектов с использованием модификаторов.

Модификаторы – ключевые слова, которые дают дополнительное значение коду и классам.

Класс непосредственно, его переменные, методы или конструкторы являются доступными для других классов или не доступными, в зависимости от используемого модификатора доступа.

В языке Java существуют следующие модификаторы доступа:

public общий доступ, для любых объектов и извне
private частный доступ, только из методов данного класса
protected защищенный доступ, из методов данного класса и его производных классов, а также из классов, определенных в том же пакете (каталоге)

 

Модификатор доступа protected не позволяет никакому классу обращаться к защищенным членам класса. Переменная, метод, внутренний класс и его методы могут быть protected. Защита класса возможна, если:

- оба класса находятся в одном и том же пакете.

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

Модификатор доступа private – самый ограниченный модификатор доступа. Он делает переменные и методы видимыми только в данном классе. Следовательно, класс верхнего уровня в иерархии наследования никогда не объявляется как private.

Модификатор доступа friendly – не является ключевым словом, но в отсутствии модификатора на класс, переменную или метод, они получают этот модификатор. Они становятся дружественными (friendly), то есть к ним можно обратиться из любого класса в том де самом пакете. К дружественным методам или переменным нельзя обратиться из другого класса другого пакета, который унаследовал данный класс.

 

Далее представлена таблица описания модификаторов доступа

  private friendly protected public
Тот же самый класс Да Да Да Да
Тот же самый пакет, другой класс Нет Да Да Да
Тот же самый пакет подкласс Нет Да Да Да
Другой пакет другой класс Нет Нет Нет Да
Другой пакет подкласс Нет Нет Да Да

Ссылка ‘this’

Иногда объекту-получателю бывает необходимо знать ссылку на самого себя. Например, объект-получатель может захотеть внести себя в какой-нибудь список объектов. В каждом методе может использоваться this — ссылка на текущий объект (объект-получатель). Следующее определение clear эквивалентно приведенному выше:

public void clear() {

this.x = 0;

this.y = 0;

}

Ссылка this часто используется в качестве параметра для тех методов, которым нужна ссылка на объект. Кроме того, this также может применяться для именования членов текущего объекта. Один из методов Point, который называется move и служит для присвоения полям x и y определенных значений:

public void move(double x, double y) {

this.x = x;

this.y = y;

}

В методе move ссылка this помогает разобраться, о каких x и y идет речь. Присвоить аргументам move имена x и y вполне разумно, поскольку в этих параметрах методу передаются координаты x и y точки. Но тогда получается, что имена параметров совпадают с именами полей Point, и имена параметров скрывают имена полей. Если бы мы просто написали x = x, то значение параметра x было бы присвоено самому параметру, а не полю x, как мы хотели. Выражение this.x определяет поле x объекта, а не параметр x метода move.

Наследование

Наследование не что иное, как приобретение свойства другого объекта или класса. Наследование в Java осуществлено отношениями подкласса или класса. Суть наследования состоит в создании производного класса, который имеет возможности базового класса плюс свои собственные возможности.

Суперкласс (superclass) – это класс, от которого будет происходить наследование, а подкласс (subclass) – это класс, который наследовал качества суперкласса. Когда наследование осуществлено, подкласс получает свойства суперкласса плюс его собственные свойства.

Говорят, что подкласс расширяет (extends) суперкласс. Чтобы выполнить наследование класса, необходимо использовать ключевое слово extends в определении подкласса.

class Programmer extends Employee { }

Любой подкласс может расширять только один суперкласс.

В Java используется расширенное понятие наследования. Поскольку подкласс добавляет к своим свойствам унаследованные свойства суперкласса, объект подкласса может обращаться к любому методу суперкласса, но не наоборот. Это происходит потому, что подкласс знает свойства и методы своего суперкласса, так как он унаследован от него. Но суперкласс не знает различные свойства и методы своего подкласса. Суперкласс в Java может иметь n подклассов, но подкласс может иметь только один суперкласс. Java не поддерживает концепцию множественного наследования.

В производном классе функции базового класса могут быть переопределены.

Переопределенные методы – это методы, которые находятся в суперклассе так же как и в подклассе.


Дата добавления: 2015-10-29; просмотров: 79 | Нарушение авторских прав


Читайте в этой же книге: Borland JBuilder 9 | Oracle9i JDeveloper и Oracle9i Developer Suite | Java в Internet | Первая программа на языке Java | Синтаксис языка | Типы данных языка Java | Вещественный тип данных | Поразрядные операторы | Троичный оператор | Операторы цикла do-while, while, for |
<== предыдущая страница | следующая страница ==>
Оператор continue| Перегрузка конструктора

mybiblioteka.su - 2015-2024 год. (0.009 сек.)