当前位置: 首页 > >

Java8:接口新特性

发布时间:

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。



友情链接: