JDK8新特性

jdk8新特性

一、接口增强

1. 接口中的默认方法

1.1 为什么需要默认方法

在jdk8以前的版本,抽象方法只能有静态常量,抽象方法

interface A{
    void run();
}
class B implements A{
    @override
    public void run(){
        System.out.println("我是B类的run方法!");
    }
}
class C implements A{
    @override
    public void run(){
        System.out.println("我是C类run方法");
    }
}

如上代码块,如果这时我们需要业务拓展,在A接口中新增一个方法

interface A{
    void run();
    void newMethod();
}
class B implements A{
    @override
    public void run(){
        System.out.println("我是B类的run方法!");
    }
}
class C implements A{
    @override
    public void run(){
        System.out.println("我是C类run方法");
    }
}

这时如果我们不实现我们新增的newMethod就会报错,上面代码块还好,毕竟实现这个接口的类并不多,但是在实际开发中,会有很多很多,如果在jdk8以前我们得一个个的去重写,但在jdk8中新增了默认方法的概念

1.2 接口默认方法的写法

interface A{
    /*
    *默认方法的语法
    */
    访问修饰符 default 返回值类型 方法名(){
        System.out.println("Hello,我是默认方法");
    }
}
//默认方法不需要重写 当然如果你需求不一样也可以进行重写
class B implements A{
    
}

1.3接口中默认方法的使用

  • 实例化对象调用
interface A{
    public default String getSomething(){
        System.out.println("默认方法被调用");
        return "你好啊";
    }
}
class B implements A{
    
}
class Test{
    public static void main(String args[]) {
        A a = new B();
        System.out.println(a.getSomething);
    }
}

  • 实现类重写接口的方法
interface A{
    public default String getSomething(){
        System.out.println("默认方法被调用");
        return "你好啊";
    }
}
class B implements A{
    @override
    public String getSomething(){
        System.out.println("我是被重写的默认方法!");
        return "我是B类中的默认方法";
    }
}
class Test{
    public static void main(String args[]) {
        A a = new B();
        System.out.println(a.getSomething);
    }
}

2、接口静态方法

2.1语法规则

interface A{
    //只能通过接口类型调用
    访问修饰符 static 返回值类型 方法名(){
        方法体
    }
}

接口中的静态方法是不能被实现类重写的,调用的话只能通过接口类型来调用A.静态方法()

所以在进行扩展时可以把不允许被子类重写的方法写成静态方法

2.2两者区别

  • 默认方法可以通过实例调用,静态方法通过接口名调用
  • 默认方法可以被继承,实现类可以调用默认方法也可以重写默认方法
  • 静态方法不可以被继承,实现类不能重写接口中的静态方法,只能使用接口名来调用

3.函数式接口

3.1由来

​ 我们知道使用lambda表达式前提是需要有函数式接口,而我们使用lambda表达式不需要关心接口名,抽象方法名,只需要关注参数列表返回值类型

posted @ 2022-03-16 11:37  一个小菜鸟的进阶之路  阅读(368)  评论(0编辑  收藏  举报