JDK8_新特性_详细总结+代码(2)接口中新增的方法

一、了解java发展历史

二、Lambda表达式——(最重要)

参见文章:https://blog.youkuaiyun.com/qq_51550750/article/details/125762371

三、接口中新增的方法

1.JDK8中接口的新增

在JDK8中,针对接口有做增强。
在JDK8之前,在接口中:

interface 接口名称{
	静态常量;
	抽象方法;
}

在JDK8之后,对接口做了一些增加,在接口中还可以有静态方法默认方法

interface 接口名称{
	静态常量;
	抽象方法;
	默认方法;
	静态方法;
}

2.默认方法

2.1为什么要增加默认方法

举例说明:

package com.bones.jdk8Learning_Interface;

/**
 * @author : bones
 * @version : 1.0
 */
public class Test01 {
    public static void main(String[] args) {
        A b = new B();
        A c = new C();
    }
}
interface A{
    //在JDK1.8之前接口中只要新增了一个方法,所有实现类都需要重写这个方法,这样子不利于接口的扩展
    void test1();
    void test2();
}
class B implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

}
class C implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}

再举一个例子:Map类:
有165个实现类:
在这里插入图片描述
但是Map中有很多都是抽象方法:
在这里插入图片描述

但是有一个方法是默认方法:
在这里插入图片描述
那么每一个实现类就没有必要都重写了。

总结一下就是:在JDK8以前端口中只能有抽象方法和静态常量,会存在问题(弱点):
如果接口中新增抽象方法,那么实现类都必须要重写这个抽象方法,非常不利于接口的扩展的。

2.2接口默认方法 的格式

接口中默认方法 的语法格式如下:

interface 接口名称{
	修饰符 default 返回类型 方法名{
			方法体;
	}
}

基本使用:

package com.bones.jdk8Learning_Interface;

/**
 * @author : bones
 * @version : 1.0
 */
public class Test01 {
    public static void main(String[] args) {
        A b = new B();
        System.out.println(b.test3());
        A c = new C();
        System.out.println(c.test3());
    }
}
interface A{
    //在JDK1.8之前接口中只要新增了一个方法,所有实现类都需要重写这个方法,这样子不利于接口的扩展
    void test1();
    void test2();
    //接口中定义的默认方法
    public default String test3(){
        return "hello ,interface default method exec!";
    }
}
class B implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

    //实现类中也可以重写default方法
    @Override
    public String test3() {
        return "实现类B重写的接口中的 默认方法";
    }
}
class C implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}

运行结果:
在这里插入图片描述
接口中的默认方法有两种使用方式:
1.实现类直接调用接口的默认方法
2.实现类重写接口的默认方法(有必要重写就重写,看需求)
默认方法对比于抽象方法,接口的扩展性就变强了。

3.静态方法

3.1语法规则

JDK8中为接口新增了静态方法,作用也是为了接口的扩展。

语法规则:

interface 接口名称{
	修饰符 static 返回值类型 方法名{
			方法体;
	}
}

来看案例:

package com.bones.jdk8Learning_Interface;

/**
 * @author : bones
 * @version : 1.0
 */
public class Test01 {
    public static void main(String[] args) {
        A b = new B();
        System.out.println(b.test3());
        A c = new C();
        System.out.println(c.test3());
        //接口中的静态方法只能通过【接口名.方法名】来调用
        System.out.println(A.test04());
    }
}
interface A{
    //在JDK1.8之前接口中只要新增了一个方法,所有实现类都需要重写这个方法,这样子不利于接口的扩展
    void test1();
    void test2();
    //接口中定义的默认方法
    public default String test3(){
        return "hello ,interface default method exec!";
    }
    //接口中的静态方法,注意不能在子类中重写静态方法
    public static String test04(){
        return "interface static method";
    }
}
class B implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

    //实现类中也可以重写default方法
    @Override
    public String test3() {
        return "实现类B重写的接口中的 默认方法";
    }
}
class C implements A{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}

注意上面接口中 的静态方法以及调用:

public static String test04(){
    return "interface static method";
}
A.test04()

运行结果:
在这里插入图片描述

3.2静态方法的使用

接口中的静态方法在实现类中是不能被重写的,调用只能通过接口类型来实现,即通过接口.方法名()来调用.
所以不允许子类重写的方法可以考虑用接口中的静态方法去书写代码,支持子类重写或者不支持子类重写可以用默认方法。

4.接口中默认方法和静态方法的区别

1.默认方法通过实例调用,静态方法通过接口名.方法名()调用
2.默认方法可以被继承,实现类可以直接调用接口默认方法,也可以重写接口默认方法;而静态方法不能被继承,实现类不能重写接口的静态方法,只能使用接口名调用


四、函数式接口

五、方法引用(::)

六、Stream API——(最重要)

七、新时间日期API

八、其他新特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值