Java 在接口Interface中 使用关键字 default

简介: Java 在接口Interface中 使用关键字 default

default 这个关键字,说实话平时见到的场景很少,使用的也不多。


印象中有用到的时候,


1.switch case  这个就是用在最后,所有条件都不匹配,默认进行处理;


2.自定义注解会有用到,给予一个默认值;


3. 就是咱们这篇里介绍的,在接口中使用这个关键字 。


那么,开始进入主题前,我举个例子,来形容下在接口中使用这个default的场景:


当你很多个impl都去实现 这个接口, 而每个impl都是要包含同一个方法的时候,那么你可以直接在接口里面实现这个方法,并使用default修饰。


例如,建筑工人出行,教师出行,程序员出行, 他们都需要实现一个出行的接口,他们的出行方式不同,有骑自行车,有坐公交,有搭地铁等等, 但是他们都有一个相同的行为, ‘需要戴口罩’。  那么这个 戴口罩 的方法就可以放在接口 Interface中 使用关键字 default 修饰。


实例:


创建 Interface接口,  GoOutService.class:


/**
 * @Author : JCccc
 * @CreateTime : 2020/3/10
 * @Description :
 **/
public interface GoOutService {
    //公共行为,戴口罩
    default void wearMask(Boolean b){
        if (b){
            System.out.println("已戴,安全出行,为己为人");
        }else {
            System.out.println("sorry");
        }
    }
    //出行方式
    void goOutWay(Boolean b);
    //看天气
    static  void getWeatherInfo(Boolean b){
        System.out.println("今日天晴,可出行");
    }
}


接着是分别的程序员和教师的出行实现类:


ItManGoOutImpl.class:


import org.springframework.stereotype.Service;
/**
 * @Author : JCccc
 * @CreateTime : 2020/3/10
 * @Description :
 **/
@Service
public class ItManGoOutImpl implements GoOutService {
    @Override
    public void goOutWay(Boolean b) {
        System.out.println("ItMan 坐地铁");
    }
}


TeacherGoOutImpl.class:


import org.springframework.stereotype.Service;
/**
 * @Author : JCccc
 * @CreateTime : 2020/3/10
 * @Description :
 **/
@Service
public class TeacherGoOutImpl implements GoOutService  {
    @Override
    public void goOutWay(Boolean b) {
        System.out.println("Teacher 骑自行车");
    }
}


最后弄个小接口看看效果:


MyController.class:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @Author : JCccc
 * @CreateTime : 2020/3/10
 * @Description :
 **/
@Controller
public class MyController {
    @Autowired
    GoOutService itManGoOutImpl;
    @Autowired
    GoOutService   teacherGoOutImpl;
    @ResponseBody
    @GetMapping("/myTest")
    public void myTest() {
        Boolean b = true;
        itManGoOutImpl.wearMask(b);
        itManGoOutImpl.goOutWay(b);
        teacherGoOutImpl.wearMask(b);
        teacherGoOutImpl.goOutWay(b);
    }
}


运行效果:


image.png


当然,上文中,我在接口 GoOutService里也加入了一个静态的实现方法,getWeatherInfo 看天气。


也是可以通过接口直接调用:

image.png


ok,这次的 在接口Interface中 使用关键字 default 就到此吧。

 

ps:


1. 如果没有在springboot或者spring框架里面使用, 可以采取通过new 实现接口实现类来进行验证使用,如,


image.png


2. 这里使用的default关键字 跟 在实体类中 定义方法不使用任何修饰符,系统默认采取default修饰 ,这两种情况是不一样的!

相关文章
|
12天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
160 57
|
12天前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
2104 3
|
15天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
20天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
28 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
127 1
|
Java
Java接口和抽象类
Java接口和抽象类
94 0
|
5月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
44 2
|
8月前
|
设计模式 搜索推荐 Java
java接口和抽象类的区别,以及使用选择
java接口和抽象类的区别,以及使用选择
83 0