Ответ
Перегрузка методов (method overloading) в Java — это возможность класса иметь несколько методов с одним и тем же именем, но разными параметрами (типом, количеством или порядком). Компилятор определяет, какой именно метод нужно вызвать, на основе переданных аргументов. Это один из способов реализации полиморфизма на этапе компиляции.
Пример из практики тестирования (Page Object Model): Часто перегрузка используется для создания удобных методов поиска или взаимодействия с элементами.
public class LoginPage {
private WebDriver driver;
// Метод для логина только с обязательными полями
public HomePage login(String username, String password) {
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("submit")).click();
return new HomePage(driver);
}
// Перегруженный метод для логина с дополнительным параметром - доменом
public HomePage login(String username, String password, String domain) {
selectDropdown(By.id("domain"), domain); // Выбор домена
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("submit")).click();
return new HomePage(driver);
}
// Перегруженный метод для логина с использованием объекта Credentials
public HomePage login(Credentials creds) {
return login(creds.getUsername(), creds.getPassword(), creds.getDomain());
}
}
// Использование в тесте
LoginPage loginPage = new LoginPage(driver);
loginPage.login("testUser", "pass123"); // Вызовется первый метод
loginPage.login("admin", "adminPass", "CORP"); // Вызовется второй метод
Ключевые правила перегрузки:
- Сигнатура метода: Определяется именем и списком параметров (их типами и порядком). Возвращаемый тип НЕ входит в сигнатуру и не учитывается при перегрузке.
- Модификаторы доступа могут быть разными.
- Могут бросать разные исключения.
- Перегружать можно как обычные методы, так и конструкторы (это используется для создания объектов с разными начальными данными).
Преимущества для написания автотестов: Улучшает читаемость и поддерживаемость кода, предоставляя единое имя для логически схожих операций с разными наборами входных данных.