增强型接口

从JDK1.8开始,Java中引入了一些新功能,而其中很多功能都是为了接口而设计的,下面我们来看看接口的一些新功能。


1、可以在接口中定义用default修饰的普通方法,可以在实现它的子类中覆写。

看例子:

interface Ime{
    public default void fun() {
        System.out.println(1);
    }
    void fun1();
}

class Imeage implements Ime{
    public void fun() {
        System.out.println("fun");
    }
    @Override
    public void fun1() {
        System.out.println(10);
    }
}
public class Test{
    public static void main(String[] args) {
        Ime a = new Imeage();
        a.fun();
        a.fun1();
    }
}

结果是:

fun
10

如果在子类中不对fun()方法进行覆写,则结果是:

1
10

2.可以在接口中定义静态方法,由类名直接调用。

看例子:

interface Ime{
    public static void fun() {
        System.out.println(3);
    }
    void fun1();
}
public class Test{
    public static void main(String[] args) {
        Ime.fun();
    }
}

结果:3

由以上两点可以看到接口和抽象类的区别已经基本消弭,最主要的区别就是抽象类用于单继承,而接口可以实现多继承。


3.Lambda表达式

在JDK的1.8更新中同样引进了函数编程的概念,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。
Lambda表达式实现的要求:接口中只能有一个方法。一般用Annotation参数 @FunctionalInterface声明。
看例子:

@FunctionalInterface
interface Ime{
    void fun();
}

public class Test{
    public static void main(String[] args) {
        Ime a = ()->System.out.println("Lambda");
        a.fun();
    }
}

结果:Lambda
如果需要执行多条语句时:

public class Test{
    public static void main(String[] args) {
        Ime a = ()->{System.out.println("Lambda");
            System.out.println("!!!");
            };
        a.fun1();
    }
}

结果:

Lambda
!!!

如果方法是进行数据的返回,可以不用写return。
看例子:

@FunctionalInterface
interface Ime{
    int add(int x, int y);
}

public class Test{
    public static void main(String[] args) {
        Ime a = (x, y) -> x + y;
        System.out.println(a.add(10, 20));
    }
}

结果是:30

猜你喜欢

转载自blog.csdn.net/qq_40178464/article/details/80637333