深入理解Java8新特性之接口中的默认方法和静态方法

 更新时间:2021年11月16日 09:23:03   作者:张起灵-小哥  
从Java8开始,程序允许在接口中包含带有具体实现的方法,使用default修饰,这类方法就是默认方法。默认方法在接口中可以添加多个,并且Java8提供了很多对应的接口默认方法,接下来让我们一起来看看吧

1.接口中的默认方法和静态方法

Java 8中允许接口中包含具有具体实现的方法,该方法称为 “默认方法” ,默认方法使用 default 关键字修饰。

接口默认方法的 ” 类优先 ” 原则。若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了一个同名的方法时

  • 选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
  • 接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突。

同时,Java8 中,允许接口中添加静态方法(static)。

2.应用举例

package com.szh.java8;
 
/**
 *
 */
interface InterfaceOne {
 
    default String getMessage() {
        return "哈哈哈";
    }
 
    static void show() {
        System.out.println("接口中的静态方法");
    }
}
 
interface InterfaceTwo {
    default String getMessage() {
        return "嘿嘿嘿";
    }
}
 
class ClassOne {
    public String getMessage() {
        return "呵呵呵";
    }
}
 
class SubClass1 extends ClassOne implements InterfaceOne {
 
}
 
class SubClass2 extends ClassOne implements InterfaceOne,InterfaceTwo {
 
}
 
class SubClass3 implements InterfaceOne,InterfaceTwo {
 
    @Override
    public String getMessage() {
        return InterfaceTwo.super.getMessage();
    }
 
}
 
public class TestClass {
 
    public static void main(String[] args) {
        SubClass1 sub1 = new SubClass1();
        System.out.println(sub1.getMessage());
 
        SubClass2 sub2 = new SubClass2();
        System.out.println(sub2.getMessage());
 
        SubClass3 sub3 = new SubClass3();
        System.out.println(sub3.getMessage());
 
        InterfaceOne.show();
    }
}

虽然SubClass1类继承了ClassOne、同时实现了InterfaceOne,由于类优先原则,所以这里执行的是ClassOne类中的getMessage方法。

SubClass2与SubClass1是同样的道理。

而SubClass3就不一样了,它没有继承ClassOne这个类,而是同时实现了InterfaceOne、InterfaceTwo这两个接口,那么它就必须选择其中一个来对默认方法进行实现(覆盖 / 重写),实现的是哪个接口,相应的就执行哪个接口的默认方法。

最后接口中的静态方法就和类中的静态方法一样,直接 接口名.静态方法名 就可以调用了。

到此这篇关于深入理解Java8新特性之接口中的默认方法和静态方法的文章就介绍到这了,更多相关Java 新特性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java后台发起get请求获取响应数据

    java后台发起get请求获取响应数据

    这篇文章主要为大家详细介绍了java后台发起get请求获取响应数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 在Java的Hibernate框架中使用SQL语句的简单介绍

    在Java的Hibernate框架中使用SQL语句的简单介绍

    这篇文章主要介绍了在Java的Hibernate框架中使用SQL语句的方法,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-01-01
  • Java try catch finally异常处理组合详解

    Java try catch finally异常处理组合详解

    这篇文章主要介绍了Java try catch finally异常处理组合详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 如何基于js及java分析并封装排序算法

    如何基于js及java分析并封装排序算法

    这篇文章主要介绍了如何基于js及java分析并封装排序算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • springboot 整合 nacos 配置实现多个环境不同配置

    springboot 整合 nacos 配置实现多个环境不同配置

    本文介绍了Nacos配置中心的优势,包括与Apollo的性能对比,Nacos服务端的安装与配置,以及如何在SpringBoot项目中集成Nacos进行多环境配置,提供了详细的步骤,包括下载、安装、配置中心的创建和项目集成,旨在帮助开发者更好地使用Nacos进行项目配置管理
    2024-09-09
  • 解析Runtime中shutdown hook的使用详解

    解析Runtime中shutdown hook的使用详解

    本篇文章是对解析Runtime中shutdown hook的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • SpringMVC的ModelAndView传值方法

    SpringMVC的ModelAndView传值方法

    今天小编就为大家分享一篇SpringMVC的ModelAndView传值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 基于feign传参MultipartFile问题解决

    基于feign传参MultipartFile问题解决

    这篇文章主要介绍了基于feign传参MultipartFile问题解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring Kafka中@KafkaListener注解的参数与使用小结

    Spring Kafka中@KafkaListener注解的参数与使用小结

    @KafkaListener注解为开发者提供了一种声明式的方式来定义消息监听器,本文主要介绍了Spring Kafka中@KafkaListener注解的参数与使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • linux下执行java程序的sh脚本分享

    linux下执行java程序的sh脚本分享

    这篇文章主要介绍了linux下执行java程序的sh脚本,仅供参考,但是设置的时候环境变量是最重要的,我就是环境变量一直不对,总是按网上查到的来,不明白怎么回事,才一直出错,其实环境变量就是你要执行的java程序所在的位置
    2014-09-09

最新评论