函数式接口的定义:
如果接口内只定义一个抽象方法,则该接口称为函数式接口,如下例:
package qaq;
@FunctionalInterface
public interface IFather {
void eat();
}
该接口中只有eat的抽象方法,所以该接口成为函数式接口。
注意:1、可以使用@FunctionalInterface 注解来验证一个接口是不是函数式接口,Java8中java.lang.Runnable、java.util.Comparator都是函数式接口;
2、函数式接口中可以定义多个常量、多个默认方法和多个静态方法,但只能定义一个抽象方法及多个java.lang.Object中的public方法,如下例:
package qaq;
@FunctionalInterface
public interface IFather {
void eat();
public static void sleep() {
}//可以定义多个静态方法
public default void sleep1() {
}//可以定义多个默认方法
}
@FunctionalInterface
interface IMammal {
void move();
boolean equals(Object obj);
}//可以定义多个java.lang.Object中的public方法
抽象类与接口区别
instanceof运算符
instanceof运算符用于判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false,其使用格式如下:
引用类型变量 instanceof (类、抽象类或接口)
package suris;
public class Son1 extends Father {
public void son() {
Son1 son1 =new Son1();
System.out.println(son1 instanceof Son1);//判断前面对象是否是后面类创建的对象
System.out.println(son1 instanceof IFather);//判断前面对象是否是后面接口创建的对象
System.out.println(son1 instanceof Father);//判断前面对象是否是后面抽象类创建的对象
}
}
instanceof运算符用于强制类型转换之前检查对象的真实类型以避免类型转换异常,从而提高代码健壮性。