У меня есть функциональный интерфейс, который содержит 1 статический метод, 1 метод по умолчанию и 1 нестатический абстрактный публичный метод, как показано ниже: -
package com.lambda;
@FunctionalInterface
public interface MyFunctionalInterface {
static void printDetails(){
System.out.println("Im a static method");
}
default void printDetails2(){
System.out.println("I'm in default method");
}
void printName();
}
Из другого класса, используя лямбда-выражение, япытаясь вызвать и переопределить эти методы, как показано ниже: -
package com.lambda;
public class Example1 {
public static void main(String[] args) {
//static method call
MyFunctionalInterface.printDetails();
//Lambda expression call to an abstract method
MyFunctionalInterface myFunctionalInterface = () -> System.out.println("My name is Vinod Kumar Nair");
myFunctionalInterface.printName();
//Lambda expression call to a default method
MyFunctionalInterface myFunctionalInterface1 = () -> System.out.println("Im overriding default method");
myFunctionalInterface1.printDetails2();
}
}
Вот вывод, который я получаю: -
Im a static method
My name is Vinod Kumar Nair
I'm in default method
Используя лямбда-выражение, я могу вызвать статический методназывается «printDetails».Я также могу переопределить «printName ()» с помощью моей логики реализации, где печатается «Меня зовут Винод Кумар Наир».
Проблема в том, что я не могу переопределить метод по умолчанию, printDetails2 () с моей реализацией.Я не получаю вывод как «Я переопределяю метод по умолчанию».Я все еще получаю логику реализации по умолчанию.
Есть ли проблема в переопределении метода по умолчанию с помощью лямбда-выражения.Если да, то вы можете сказать мне, как переопределить этот метод по умолчанию, используя лямбда-выражение.
Спасибо