@ відповідь sblundy чудова, але анонімні внутрішні класи мають два невеликі недоліки, головним є те, що вони, як правило, не підлягають повторному використанню, а вторинний - об'ємний синтаксис.
Приємно те, що його малюнок розширюється на повні класи без будь-якої зміни головного класу (того, який виконує обчислення).
Коли ви створюєте інстанціювання нового класу, ви можете передавати параметри до цього класу, які можуть діяти як константи у вашому рівнянні - тож якщо один із ваших внутрішніх класів виглядає так:
f(x,y)=x*y
але іноді вам потрібен такий:
f(x,y)=x*y*2
а може і третя, що:
f(x,y)=x*y/2
замість створення двох анонімних внутрішніх класів або додавання параметра "прохідний", ви можете зробити один клас АКТУАЛЬНИЙ, який ви інстанціюєте як:
InnerFunc f=new InnerFunc(1.0);// for the first
calculateUsing(f);
f=new InnerFunc(2.0);// for the second
calculateUsing(f);
f=new InnerFunc(0.5);// for the third
calculateUsing(f);
Він просто зберігатиме константу в класі та використовує її у способі, визначеному в інтерфейсі.
Насправді, якщо ЗНАЙТЕ, що ваша функція не буде збережена / повторно використана, ви можете зробити це:
InnerFunc f=new InnerFunc(1.0);// for the first
calculateUsing(f);
f.setConstant(2.0);
calculateUsing(f);
f.setConstant(0.5);
calculateUsing(f);
Але незмінні класи безпечніші - я не можу придумати виправдання, щоб зробити клас на зразок цього змінного.
Я дійсно розміщую це лише через те, що клацаю щоразу, коли чую анонімний внутрішній клас - я бачив багато зайвого коду, який був "Потрібен", тому що перше, що робив програміст, - це анонімно, коли він повинен був використовувати фактичний клас і ніколи переосмислив своє рішення.