接口定义增强
接口里面使用 defaul 和 static 定义方法的意义在于:避免子类重复实现同样的代码。
接口的实现还应以抽象方法为主。
interface IMessage{
public abstract void print();
default void fun(){
System.out.println("default");
}
public static void get(){
System.out.println("static");
}
}
class MessageImpl implements IMessage{
@Override
public void print() {
System.out.println("abstract");
}
}public class Main {
public static void main(String[] args) {
IMessage iMessage = new MessageImpl();
iMessage.print();
iMessage.fun();
IMessage.get();
}
}
Lamda 表达式
Lamda 表达式作用是避免定义匿名内部类时过多无用的操作。
interface IMessage{
public void print(String str);
}
public class Main {
public static void main(String[] args) {
fun((str) -> {
str = str.toUpperCase();
System.out.println(str);
});
}
public static void fun(IMessage iMessage){
iMessage.print("HelloWord");
}
}
方法引用
与之前相比较,方法引用前不需要再定义对象,而是可以理解为将对象定义在了参数上。
对象的引用是使用不同的名字,而方法的引用是需要有一个函数式接口,并且设置好参数。
@FunctionalInterface
interface IMessage <S> {
public int compare(S s1, S s2);
}
public class Main {
public static void main(String[] args) {
IMessage <String> iMessage = String :: compareTo;
System.out.println(iMessage.compare("A","B"));
}
}