Java8:接口新特性

来源:互联网 发布:火狐浏览器mac版 编辑:程序博客网 时间:2024/06/05 14:31

Java8新增了接口的默认方法和类方法:

以前,接口里的方法要求全部是抽象方法或者常量,java8以后允许在接口里定义默认方法和类方法:

不同的是:

默认方法可以通过实现接口的类实例化的对象来调用,而类方法只能在本接口中调用或在实现类中实现:

下面是使用实例:

@FunctionalInterfacepublic 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。

0 0
原创粉丝点击