Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Java.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

Тема 2.12 Перегрузка конструкторов

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

Листинг 2.11

public class Box {

public double width;

public double height;

public double depth;

// Это конструктор класса Box.

public Box(double w, double h, double d) {

width = w;

height = h;

depth = d;

}

// вычисление и возврат значения

public double volume() {

return width * height * depth;

}

}

Как видите, конструктор Box () требует передачи трех параметров. Это означает, что все объявления объектов Box должны передавать конструктору Box () три аргумента. Например, следующий оператор недопустим:

Box ob = new Box () ;

Поскольку конструктор Box () требует передачи трех аргументов, его вызов без аргументов – ошибка. Эта ситуация порождает три важных вопроса. Что если нужно было просто определить параллелепипед и его начальные размеры не имели значения (или не были известны)? Или, нужно иметь возможность инициализировать куб, указывая только один размер, который должен использоваться для всех трех измерений? При текущем определении класса Box все эти дополнительные возможности недоступны.

К счастью, решение подобных проблем достаточно просто: достаточно перегрузить конструктор Box, чтобы он учитывал только что описанные ситуации. Ниже приведена программа, которая содержит усовершенствованную версию класса Box(листинг 2.12).

Листинг 2.12

public class Box {

public double width;

public double height;

public double depth;

// конструктор, используемый при указании всех измерений

public Box(double w, double h, double d) {

width = w;

height = h;

depth = d;

}

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

public Box() {

width = -1; // значение -1 используется для указания

height = -1; // неинициализированного

depth = -1; // параллелепипеда

}

// конструктор, используемый при создании куба

public Box(double len) {

width = height = depth = len;

}

// вычисление и возврат объема

public double volume() {

return width * height * depth;

}

}

public class OverloadCons {

public static void main(String args[]) {

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

Box myboxl = new Box(10, 20, 15);

Box mybox2 = new Box();

Box mycube = new Box(7);

double vol;

vol = myboxl.volume();

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

vol = mybox2.volume();

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

vol = mycube.volume();

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

}

}

Эта программа создает следующий вывод:

Объем myboxl равен 3000.0 Объем mybox2 равен -1.0 Объем mycube равен 343.0

Как видите, соответствующий перегруженный конструктор вызывается в зависимости от параметров, указанных при выполнении операции new.

Задание:

Напишите перегруженные конструкторы для создания разных фигур. Квадрат – передаем 1 параметр double и добавляем значение в поле visota; круг – 1 параметр int и добавляем значение в поле radius; прямоугольника – 2 параметра double и добавляем значения в поля visota и shirina;