Как элегантнее переопределить реализацию одного из методов интерфейса для отдельно взятого объекта?

Переопределение реализации метода интерфейса для отдельно взятого объекта можно сделать двумя способами: с использованием анонимных классов или с использованием лямбда-выражений. Оба подхода являются элегантными и позволяют гибко изменять поведение объектов.

Первый способ - использование анонимных классов. Анонимный класс - это безымянный класс, который создается внутри другого класса или метода. Для переопределения метода интерфейса с помощью анонимного класса нужно сначала создать объект класса, реализующего этот интерфейс, а затем переопределить нужный метод. Пример кода:

public interface MyInterface {
   void myMethod();
}

public class MyClass {
   public static void main(String[] args) {
      MyInterface obj = new MyInterface() {
         @Override
         public void myMethod() {
            // переопределенная реализация метода
         }
      };
      
      obj.myMethod();
   }
}

В данном примере мы создали анонимный класс, реализующий интерфейс MyInterface, и переопределили метод myMethod().

Второй способ - использование лямбда-выражений. Лямбда-выражение - это компактный способ представления функционального интерфейса, то есть интерфейса с единственным абстрактным методом. Для переопределения метода интерфейса с помощью лямбда-выражений нужно указать параметры метода и его тело. Пример кода:

public interface MyInterface {
   void myMethod();
}

public class MyClass {
   public static void main(String[] args) {
      MyInterface obj = () -> {
         // переопределенная реализация метода
      };
      
      obj.myMethod();
   }
}

В данном примере мы создали объект интерфейса MyInterface с помощью лямбда-выражения, которое переопределяет метод myMethod().

Оба способа элегантны и позволяют гибко изменять поведение объектов в Java. Вы должны выбрать способ в зависимости от контекста и требований вашей программы.