Наприклад в С++ ви можете записати:
void MyFunction (String param1, int param2, bool param3=false);
В цьому випадку третій параметр є необов"язковим, і якщо його не задавати, то функція візьме значення по-замовчуванню, яке присвоєне в оголошенні функції (в даному прикладі - param3=false) .
Але в Java подібний код неможливий. Якщо ж ми все таки хочемо створити щось подібне, то треба або просто в тілі метода присвоїти бажане значення, або викликати перезавантажений аналог цього метода за допомогою ключового слова this:
public MyFunction(String param1, int param2) { this(param1, param2, false); }
this викличе перезавантажений метод з трьома вхідними параметрами:
public MyFunction(String param1, int param2, boolean param3)
{
.......
}
Власне ця заборона на використання параметрів по-замовчуванню була зроблена для можливості однозначного виклику перезавантажених функцій. Бо якщо, наприклад, клас має перезавантажений метод, один з варіантів якого має три параметри, другий - два, а третій два і один по-замовчуванню, то якби можна було не вказувати у виклику параметр по-замовчуванню, який варіант компілятор повинен вибрати?