// Базовый интерфейс — функциональный интерфейс, так как он содержит только один абстрактный метод
@FunctionalInterface
public interface BaseInterface {
int sum(int a, int b);
}
Создание функционального интерфейса с использованием лямбда-выражения
public class Implementer {
public static void main(String[] args) {
BaseInterface base = (num1, num2) -> num1 + num2;
System.out.println(base.sum(3, 2));
}
}
Функциональность расширена в интерфейсе - добавлен новый метод по умолчанию
@FunctionalInterface
public interface BaseInterface {
int sum(int a, int b);
default String getUserDetails(String name) {
return name;
}
}
Если я переопределяю метод по умолчанию, чтобы иметь конкретную реализацию, а не по умолчанию, необходимо использовать ключевое слово «реализует» для указания интерфейса следующим образом:
public class Implementer implements BaseInterface {
public String getUserDetails(String uname) {
uname = uname.trim();
return uname;
}
public static void main(String[] args) {
BaseInterface base = (num1, num2) -> num1 + num2;
System.out.println(base.sum(3, 2));
}
}
В этом случае компилятор выдает ошибку и предлагает реализовать унаследованные абстрактные методы. Итак, должен ли я в этом случае реализовать абстрактные методы обычным способом
public class Implementer implements BaseInterface {
public String getUserDetails(String uname) {
uname = uname.trim();
return uname;
}
public static void main(String[] args) {
//BaseInterface base = (num1, num2) -> num1 + num2;
System.out.println(base.sum(3, 2));
}
@Override
public int sum(int a, int b) {
return a + b;
}
}
(или) есть ли способ использовать лямбда-выражение?
Implementer
объявить как классabstract
? - person fps   schedule 12.02.2018Implementer
, вы не реализуете методsum
, поэтому класс остается абстрактным. В любом случае, абсолютно нормально иметь абстрактный класс без абстрактных методов. Абстрактный класс представляет то, что вы не можете создать, но он не обязан содержать абстрактные методы. - person fps   schedule 12.02.2018