Java8接口中抽象方法和default和static方法的区别和使用

news/2024/4/20 16:09:52/文章来源:https://blog.csdn.net/IndexMan/article/details/128105852

Java接口说明

传统的理解是接口只能是抽象方法。但是程序员们在使用中,发现很不方便,实现接口必须重写所有方法,很麻烦。所以java设计者妥协了,在java8中,支持default和static方法,这样,实现接口时,可以选择不对default修饰的方法重写。

抽象方法

接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
这两个关键字修饰符,可以选择性地省略
方法的三要素,可以随意定义。

public interface MyInterfaceAbstract{
//这是一个抽象方法
public abstract void methodAbs1();
//这也是抽象方法
abstract void methodAbs20:
// 这也是抽象方法
public void methodAbs3();
//这也是抽象方法 void methodAbs4();
}

default方法

当一个接口要添加一些新的公共逻辑,写了一个新的方法,那么所有的实现类都需要重写新方法,如果实现类太多,会非常麻烦。
这时可以使用 default。

  1. 接口中的default方法,可以写方法内容。
  2. 接口中的default方法不强制实现类重写,不会影响到已有的实现类。
  3. 接口的实现类,可以调用接口中的default方法。

static方法

  1. 接口中的static方法,可以写方法内容。
  2. 接口中的static方法不允许实现类重写(如果重写方法加上@Override会报错),不会影响到已有的实现类。
  3. 接口中的static方法,可以直接通过接口名称调用。

示例

  • OrderService接口
public interface OrderService {/*** 接口中的变量都是 默认 public static final的,可以不用写这些修饰符*/String NAME = "static";/*** static方法,可以直接通过接口名称调用 static方法。* 比如 OrderService.selectName();**/static String selectStatic() {return NAME;}/*** default方法,可以写方法内容,实现类不强制重写 default方法。**/default String selectDefault() {return "default";}String selectOrder();
}
  • 接口实现类
public class OrderServiceImpl implements OrderService {@Overridepublic String selectOrder() {return "order";}
}
  • 测试
public class InterfaceTest {public static void main(String[] args) {OrderServiceImpl orderServiceImpl = new OrderServiceImpl();//接口的实现类,可以调用接口中的default方法String user = orderServiceImpl.selectDefault();System.out.println("selectDefault()结果为:"+user);//static方法,可以直接通过接口名称调用,无需实例化String name = OrderService.selectStatic();System.out.println("OrderService.selectStatic()结果为:"+ name);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38799.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS-DR模式单网段和多网段案例实现

1 实验环境: 一台:客户端 eth0:仅主机 192.168.10.8/24 GW:192.168.10.18一台:ROUTER eth0 :NAT 192.168.100.18/24 eth1: 仅主机 192.168.10.18/24 启用 IP_FORWARD一台:LVS eth0:NAT:DIP:192.168.100.48/24 GW:192.168.100.18两…

大数据必学Java基础(一百零八):过滤器的生命周期

文章目录 过滤器的生命周期 一、构造方法 二、初始化方法 三、拦截请求方法

【AI学习笔记】TensorFlow GPU版本的安装(超详细)

安装步骤:1. 确认显卡是否支持CUDA2. 安装CUDA3. 安装cuDNN3.1 安装 cudnn3.2 将cudnn64_8.dll存放的位置加入Path环境变量4. 安装TensorFlow GPU版本4.1 在Anaconda建立TensorFlow GPU虚拟环境4.2 安装Tensorflow-gpu4.3 安装Keras总结1. 确认显卡是否支持CUDA 在…

供应荧光染料AF532 活性酯,AF532-NHS,CAS:477876-64-5

一:产品描述 1、名称 AF5 532酯 AF532-NHS AF532 活性酯 Alexa Fluor 532 AF532 NHS ester 2、CAS编号:477876-64-5 3、分子式:C34H33N3O11S2 4、分子量:723.77 5、质量控制:95% 6、储存: -20…

Arduino开发实例-DIY酒精浓度检测计

DIY酒精浓度检测计 在本文中,将详细介绍如何创建一个简单的酒精检测器。 它可以在各种应用领域中使用。市场上有许多先进的酒精传感器,价格合理,但我们在这里使用一些基本的微控制器来制作这个项目,如 Arduino、LED、蜂鸣器和 MQ3 酒精传感器。 1、MQ-3传感器介绍 MQ-3传…

A*算法-Python实现

好久没有在CSDN上发文章了,快一年了吧。这两天重新登录了一下,不看不知道,一看吓一跳,没想到访问量快13万了。 之前写博客的时候,想着把一些有用的东西写下来,一方面是当做笔记了,免得以后忘记…

5G无线技术基础自学系列 | SU-MIMO原理

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 通过多天线技术支持单用户在上下行数据…

Vue3框架中路由的使用和局部刷新的功能(第十一课)

使用vue-router的步骤:p第一步:创建路由需要映射的组件(打算显示的页面);p第二步:通过createRouter创建路由对象,并且传入routes和history模式;配置路由映射: 组件和路径映射关系的routes数组&a…

DFL3:软件版本的选择和安装详解

这本是一个简单的问题,但是对于新手而言,所有问题,总是说的越清楚越仔细越好。我之所以这么说,肯定是有人问了。所以我就专门开一篇文章来说一说,软件版本的异同,以及如何选择。针对不同的语言,…

mysql相关基础知识篇(五)

1.MySQL 事务的四大特性说一下? 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如 A 账户…

(2)点云库处理学习——剔除点云值

1、主要参考 1.1参考地址 (1) 点云离群点剔除 — open3d python_Coding的叶子的博客-CSDN博客_离群点去除 (2) open3d之点云异常值去除(笔记5)_Satellite_H的博客-CSDN博客 (3)斯坦福经典兔子的点云数据下载地址 下载地址 Model : Bunny 1.2兔子…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

[附源码]计算机毕业设计SpringBoot高血压分析平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

时序特征提取工具

在选择了需要提取的特征,确定了时序数据特征提取数据集的长度并对先验知识建模之后,就需要利用工具搭建特征提取系统。科研机构围绕不同问题域搭建的开源时序数据特征提取工具已经不少,我们可以利用这些工具快速实现希望达成的算法效果。下面…

驱动——platform驱动总线三种匹配方式

三种platform驱动匹配方式代码案例以及现象 方式一:通过设置名字进行匹配 相关API简介: 1、platform_device的API ①分配对象 struct platform_device { const char *name;//用于进行匹配的名字 int id;//总线号 PLATFORM_DEVID_AUTO(自…

ARM cortex-A7核UART实验 收发数据

头文件: 1 #ifndef __UART4_H__ 2 #define __UART4_H__ 3 4 #include "../common/include/stm32mp1xx_rcc.h" 5 #include "..…

【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、获取照片里的位置信息 手机拍摄的相片还保存着时间、地点、镜头参数等信息,这些信息由相片接口工具ExifInterface管理,它的常用方法说明如下: getLatLong:获取相片拍摄时候的…

【人工智能 机器学习 深度学习】基础选择题1~30题 练习

目录 一、1~10题1.1 题目1.2 答案二、11~20题2.1 题目2.2 答案三、21~30题3.1 题目3.2 答案写在前面:适用于对 人工智能&机器学习&深度学习 进行复习的同学,同时,也可以通过基础题目的练习,加深理解。 一、1~10题 均是先给出10道题目,而后给出 10道题目的答案。 …

Python用广义加性模型GAM进行时间序列分析

每当你发现一个与时间对应的趋势时,你就会看到一个时间序列。我们围绕广义加性模型GAM技术进行一些咨询,帮助客户解决独特的业务问题。研究金融市场表现和天气预报的事实上的选择,时间序列是最普遍的分析技术之一,因为它与时间有着…

关于TreeView的简单使用(Qt6.4.1)

前言 TreeView是在Qt6.3中加入的,弥补了Qt中无官方树图。笔者上手尝试了下,虽然有点麻烦,但官方也做了不少简化。 本次教程,笔者创建一个简单的示例,以帮助读者使用TreeView。 一、创建模型类 当前模型需要使用C定义…