Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
Когда метод перегружается, каждый его вариант может выполнять какое угодно действие. Для установления взаимосвязи между перегружаемыми методами не существует какого-то твердого правила, но с точки зрения правильного стиля программирования перегрузка методов подразумевает подобную взаимосвязь. Следовательно, использовать одно и то же имя для несвязанных друг с другом методов не следует, хотя это и возможно. Например, имя sqr можно было бы выбрать для методов, возвращающих квадрат и квадратный корень числа с плавающей точкой. Но ведь это принципиально разные операции. Такое применение перегрузки методов противоречит ее первоначальному назначению. На практике перегружать следует только тесно связанные операции.
## Перегрузка конструкторов
Как и методы, конструкторы также могут перегружаться. Это дает возможность конструировать объекты самыми разными способами. В качестве примера рассмотрим следующую программу:
// Демонстрация перегрузки конструкторов,
class MyClass {
int х;
// Конструкторы перегружаются разными способами.
MyClass() {
System.out.println("Inside MyClass().");
x = 0 ;
}
MyClass(int i) {
System.out.println("Inside MyClass(int) . ") ;
x = i;
}
MyClass(double d) {
System.out.println("Inside MyClass(double).");
x = (int) d;
}
MyClass(int i, int j) {
System.out.println("Inside MyClass(int, int).");
x = i * j;
}
}
class OverloadConsDemo {
public static void main(String args[]) {
MyClass tl = new MyClass();
MyClass t2 = new MyClass(88);
MyClass t3 = new MyClass(17.23);
MyClass t4 = new MyClass(2, 4);
System.out.println("tl.x: " + tl.x);
System.out.println("t2.x: " + t2.x);
System.out.println("t3.x: " + t3.x);
System.out.println("t4.x: " + t4.x);
}
}
В результате выполнения этой программы получается следующий результат:
Inside MyClass().
Inside MyClass(int).
Inside MyClass(double).
Inside MyClass(int, int).
tl.x: 0
t2.x: 88
t3.x: 17
t4.x: 8
В данном примере конструктор MyClass () перегружается четырежды. Во всех вариантах этого конструктора объект типа MyClass строится по-разному. Конкретный вариант конструктора выбирается из тех параметров, которые указываются при выполнении оператора new. Перегружая конструктор класса, вы предоставляете пользователю созданного вами класса свободу в выборе способа конструирования объекта.
Перегрузка конструкторов чаще всего производится для того, чтобы дать возможность инициализировать один объект на основании другого объекта. Рассмотрим в качестве примера следующую программу, в которой класс Summation используется для вычисления суммы двух целочисленных значений.
// Инициализация одного объекта посредством другого,
class Summation {
int sum;
// построить объект из целочисленного значения
Summation(int num) {
sum = 0;
for(int i=l; i <= num; i++)
sum += i;
}
// Построение одного объекта иэ другого.
Summation(Summation ob) {
sum = ob.sum;
}
}
class SumDemo {
public static void main(String args[]) {
Summation si = new Summation(5);
Summation s2 = new Summation(si);
System.out.println("si.sum: " + si.sum);
System.out.println("s2.sum: " + s2.sum);
}
}
Выполнение этой программы дает следующий результат:
si.sum: 15
s2.sum: 15