Java8新增了接口的默认方法和类方法:
以前,接口里的方法要求全部是抽象方法或者常量,java8以后允许在接口里定义默认方法和类方法:
不同的是:
默认方法可以通过实现接口的类实例化的对象来调用,而类方法只能在本接口中调用或在实现类中实现:
下面是使用实例:
@FunctionalInterface
public interface MyInterface {
// 抽象方法
public String sub(String ss);
//常量
String CL="常量";
// java.lang.Object中的方法不是抽象方法
public boolean equals(Object var1);
// default不是抽象方法
public default void defaultMethod(){
System.out.println("执行默认方法,调用类方法");
staticMethod();
}
// static不是抽象方法
public static void staticMethod(){
System.out.println("执行类方法");
}
}
public class MyInter implements MyInterface{
@Override
public String sub(String ss) {
System.out.println("执行被实现的方法"+ss);
return ss;
}
public static void doSomeThing(){
System.out.println("做啥");
}
}
public class TestInterface {
public static void main(String[] args) {
MyInterface myInterface=(ss)-> {
System.out.println("lambda-匿名内部类实现接口抽象方法生成接口实例");
return ss;
};
System.out.println(myInterface.sub("lambda实现接口"));
System.out.println("------>>>>>");
MyInter myInter = new MyInter();
System.out.println(myInter.sub("实现接口"));
System.out.println("------>>>>>");
myInter.defaultMethod();
////myInter.doSomeThing myInter.staticMethod 都是不可以的,因为静态方法是类方法,不能通过实例调用,只能通过类调用或者类里的其他可调用方法调用
}
}
运行结果:
lambda-匿名内部类实现接口抽象方法生成接口实例
lambda实现接口
------>>>>>
执行被实现的方法实现接口
实现接口
------>>>>>
执行默认方法,调用类方法
执行类方法
Process finished with exit code 0
注:静态方法和常量只能通过类调用,具体的看JVM。