Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-1 оопип часть 4.doc
Скачиваний:
30
Добавлен:
01.04.2014
Размер:
112.64 Кб
Скачать

24. Перегрузка методов. Перегрузка конструкторов

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

При вызове перегруженного метода для определения нужной версии Java использует тип и/или количество аргументов метода. Следовательно, перегруженные методы должны различаться по типу и/или количеству их параметров. Хотя возвращаемые типы перегруженных методов могут быть различны, самого возвращаемого типа не достаточно для различения двух версий метода. Когда Java встречает вызов перегруженного метода, она просто выполняет ту его версию, параметры которой соответствуют аргументам, использованным в вызове.Например, рассмотрим следующую программу:

// Применение автоматического преобразования типов к перегрузке.

class OverloadDemo {

void test () {

System.out.println("Параметры отсутствуют");

}

// Проверка перегрузки на наличие двух целочисленных параметров.

void test(int a, int b) {

System.out.println("а и b: " + a + " " + b);

class Overload {

public static void main(String args[]) {

OverloadDemo ob = new OverloadDemo ();

int i = 88;

ob. test () ;

ob.test(10, 20) ;

ob.test(i);

// этот оператор вызовет test(double)

ob.test(123.2);

// этот оператор вызовет test(double)

}}

Программа генерирует следующий вывод:

Параметры отсутствуют

а и b: 10 20

Внутреннее преобразование test(double) а: 88

Внутреннее преобразование test(double) а: 123.2

Перегрузка методов поддерживает полиморфизм, поскольку это один из способов реализации в Java концепции "один интерфейс, несколько методов"

Поскольку имя конструктора является предопределенным именем класса, то может быть только одно имя конструктора. Но что, если вы хотите создавать объект более чем одним способом? Вам нужно два конструктора, один не принимает, а другой принимает в качестве аргумента String, который является именем файла, из которого инициализируется объект. Ода они являются конструкторами, так что они должны иметь одно и то же имя — имя класса. Таким образом, перегрузка методов необходима для получения возможности использования одного и того же имени метода с разными типами аргументов.

Есть простое правило: каждый перегруженный метод должен иметь уникальный список типов аргументов. Даже различия в порядке следования аргументов существенны для различения двух методов.

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

class Bird {

int i;}

public class DefaultConstructor {

public static void main(String[] args) {

Bird nc = new Bird(); }}

Строка

new Bird();

создает новый объект и вызывает конструктор по умолчанию, даже не смотря на то, что он не был явно определен. Без этого мы не имели бы метода построения нашего объекта. Однако если вы определили любой конструктор (с аргументами или без них) компилятор не будет синтезировать его за вас.