Java - Перегрузка методов
1. Перегруженный метод в Java
В Java разрешается в одном и том же классе определять два или более метода с одним именем, если только объявления их параметров отличаются. Это называется перегрузкой методов. Например, в следующем примере один класс объявляет два метода с одним именем test
, но разными параметрами:
public class OverloadingExample1 {
void test(int a) {
System.out.println("a: " + a);
}
void test(int a, int b) {
System.out.println("a и b: " + a + " " + b);
}
public static void main(String[] args) {
Overloading1 ob = new Overloading1();
ob.test(10);
ob.test(10, 20);
}
}
Как же JVM различает какой метод необходимо вызвать? Для этого в Java используется тип и/или количество аргументов метода.
Перегрузка методов является одним из способов поддержки полиморфизма в Java.
Возвращаемые типы перегружаемых методов могут отличаться, но самого возвращаемого типа недостаточно для того, чтобы отличать два разных варианта метода.
В следующем примере методы void test()
и double test(double a)
возвращают значения разного типа. Это допустимо, но при условии, что параметры методов будут отличаться. Закомментированный метод int test()
отличается от void test()
только типом - это недопустимо для перегруженного метода. Если его добавить, будет ошибка компиляции:
public class OverloadingExample2 {
void test() {
System.out.println("Без параметров");
}
//неправильная перегрузка методов
/* int test() {
System.out.println("Без параметров");
return 1;
}*/
double test(double a) {
System.out.println("double a: " + a);
return a * a;
}
public static void main(String[] args) {
Overloading2 ob = new Overloading2();
ob.test();
double result = ob.test(123.25);
System.out.println("Результат вызова метода ob.test(123.25): " + result);
}
}
2. Перегрузка конструкторов
Конструкторы похожи на методы, поэтому они тоже могут быть перегружены - вы можете объявлять в одном классе несколько конструкторов, которые различаются количеством и типом переменных. В следующем примере добавлены три конструктора в класс Box6
. Конечно же, при создании объекта вызывается только один из них - тот, который кажется вам наиболее подходящим:
public class Box6 {
double width;
double height;
double depth;
Box6(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
Box6() {
width = -1; // используем -1 для
height = -1; // обозначения непроинициализированной
depth = -1; // коробки
}
Box6(double len) {
width = len;
height = len;
depth = len;
}
double getVolume() {
return width * height * depth;
}
}
public class OverloadCons {
public static void main(String[] args) {
Box6 myBox1 = new Box6(10, 20, 15);
Box6 myBox2 = new Box6();
Box6 myBox3 = new Box6(7);
System.out.println("Объем myBox1: " + myBox1.getVolume());
System.out.println("Объем myBox2: " + myBox2.getVolume());
System.out.println("Объем myBox3: " + myBox3.getVolume());
}
}
![Курс 'Java для начинающих' на Udemy Курс 'Java для начинающих' на Udemy](https://storage.googleapis.com/www.examclouds.com/ad1.png)
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.