Java8新特性系列-默认方法

Java8 Interface Default and Static Methods

在 Java 8 之前,接口只能有公共抽象方法。 如果不强制所有实现类创建新方法的实现,就不可能向现有接口添加新功能,也不可能创建具有实现的接口方法。

从 Java 8 开始,接口可以具有静态和默认方法,尽管在接口中声明了这些方法,但它们具有已定义的行为。

静态方法

假如一个接口有如下的方法

static String producer() {
    return "N&F Vehicles";
}

静态 producer() 方法只能通过接口和在接口内部使用。 它不能被实现类覆盖。 要在接口之外调用它,应使用静态方法调用的标准方法:

String producer = Vehicle.producer();

默认方法

默认方法是使用新的 default 关键字声明的。 这些可以通过实现类的实例访问,并且可以被覆盖。

让我们为 Vehicle 接口添加一个默认方法,该方法也会调用该接口的静态方法:

default String getOverview() {
    return "ATV made by " + producer();
}

假设这个接口是由类 VehicleImpl 实现的。 为了执行默认方法,应创建此类的实例:

Vehicle vehicle = new VehicleImpl();
String overview = vehicle.getOverview();

Original: https://www.cnblogs.com/luoaz/p/15953022.html
Author: 小爱博客
Title: Java8新特性系列-默认方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580230/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JUC部分并发类使用方式

    下面介绍的是JUC包下一些线程安全类的一些简单使用和一些小demo。 信号量,即可以同时使用的线程数,tryrequire就是将信号量减一,release就是信号量+1,当等于0就…

    Java 2023年6月16日
    070
  • 方法的深度理解

    权限修饰符 返回值类型 类名(行参列表 )throws 异常的类型{ //方法体 约定俗称:子类中叫重写的方法,父类中叫被重写的方法。 ①子类重写的方法名和行参列表和父类被重写的方…

    Java 2023年6月7日
    089
  • 随机生成指定长度的密码

    代码分析判断字符是否为空,空默认字符长度6,否则根据参数长度设置字符串,我们需要在这里面随机获取数据实例化随机类实例化StringBuilderfor循环根据设置的长度,来给Str…

    Java 2023年6月7日
    079
  • 在springboot中使用拦截器

    在springboot中使用拦截器 拦截器Interceptor,是SpringMVC中的核心内容,利用spring的AOP(Aspect Oriented Programming…

    Java 2023年6月6日
    0105
  • Spring Boot Event 观察者模式,轻松带你实现业务解耦!

    写在最前 实际业务开发过程中,业务逻辑可能非常复杂,核心业务 + N个子业务。如果都放到一块儿去做,代码可能会很长,耦合度不断攀升,维护起来也麻烦,甚至头疼。还有一些业务场景不需要…

    Java 2023年5月29日
    0105
  • Java多线程(一)

    Java多线程(一) Java多线程(一) – 一、基本概念:程序、进程、线程 二、多线程的创建与使用 2.1 多线程的创建方式一:继承于Thread类 2.2 Thr…

    Java 2023年6月9日
    0122
  • Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求。比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等。这个时候就需要我们动态的生…

    Java 2023年5月30日
    090
  • 并发编程之:异步调用获取返回值

    大家好,我是小黑,一个在互联网苟且偷生的农民工。 Runnable 在创建线程时,可以通过 new Thread(Runnable)方式,将任务代码封装在 Runnable的 ru…

    Java 2023年6月7日
    089
  • 函数中参数传值

    1、基本数据类型传值 当函数中传入的参数为基本数据类型时,函数中对传入参数的操作不会对函数外的数据产生影响。由于基本数据类型的变量名指向的是具体的数值,在函数内部,相当于将参数进行…

    Java 2023年6月8日
    075
  • SpringBoot集成消息队列

    背景 最近在对公司开发框架进行优化,框架内涉及到多处入库的日志记录,例如登录日志/操作日志/访问日志/业务执行日志,集成在业务代码中耦合度较高且占用业务操作执行时间,所以准备集成相…

    Java 2023年6月15日
    082
  • Spring核心原理之IoC容器初体验(2)

    本文节选自《Spring 5核心原理》 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来…

    Java 2023年6月7日
    088
  • 0.1 + 0.2 == 0.3 吗?

    为什么负数要用补码表示? 负数之所以用补码的方式来表示,主要是为了统一和正数的加减法操作一样,毕竟数字的加减法是很常用的一个操作,就不要搞特殊化,尽量以统一的方式来运算。 十进制小…

    Java 2023年6月9日
    0211
  • 队列内存限制思路防止OOM

    前几天在一个开源项目的 github 里面看到这样的一个 pr: 光是看这个名字,里面有个 MemorySafe,我就有点陷进去了。 我先给你看看这个东西: 这个肯定很眼熟吧?我是…

    Java 2023年6月13日
    089
  • SpringCloud(二).Eureka注册服务中心与服务调用

    Eureka(服务注册中心),主要包括对服务功能的注册、调用、熔断、降级、负载等。 有了服务中心项目的关系有哪些变化呢,用几张图来解释一下(暂缺,后续找到好的画图软件补上): 这样…

    Java 2023年6月7日
    096
  • spring中为类类型的属性赋值

    1 ref:引用IOC容器中的某个bean的id 2 内部bean,只能在当前bean的内部使用,不能之间通过IOC容器获取 3 级联的方式,要保证提前为clazz属性进行赋值或者…

    Java 2023年6月16日
    071
  • 国庆节,零代码帮你搞定假期美食菜单

    当国庆假期遇上美食 每一口都唇齿留香 特色美食太多,不知道吃什么? AppCube带你一分钟搞定假期美食 来一场舌尖上的旅行 零代码,让假期生活有滋有味 国庆小长假,三五好友结伴出…

    Java 2023年6月15日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球