当前位置: 首页 > news >正文

边学边记——Java中有关接口的知识

目录

一.定义

1.概念

2.规范

3.补充了解

二.JDK中常用的两大接口

1.java.lang.Comparable 接口

2.java.lang.Clonable接口和深浅拷贝

(1).java.lang.Clonable接口

(2).深浅拷贝

序列化与反序列化


一.定义

1.概念

接口:表示一种行为/能力或表示一种规范。

  • 表示规范:5G接口,USB接口。
  • 表示能力/行为:IRun,ISwim等。

2.规范

在Java中使用关键字 interface 来定义接口,接口中只有全局常量和抽象方法。

命名规范:接口一般使用I开头,子类实现接口一般使用impl结尾。

  • 因此只有在接口中,public static final abstract统统可以省略不写(比如接口中属性默认是public static final修饰)。
  • 子类使用 implements 实现接口,若子类实现了父接口,同样必须实现所有的抽象方法。
  • 子类可以使用 implements 实现多个父接口(接口多实现)。
  • 子类如果仍是接口,使用 extends 关键字继承父接口。
  • 接口和类之间的关系:子类同时继承父类和实现接口的顺序。
  • 若有子类同时需要继承一个抽象类,实现父接口,请先使用extends继承一个父类,然后使用implements实现接口(先单继承,再多实现)。

3.补充了解

从JDK8开始,接口中也可以有普通方法,接口中的普通方法用 default 关键字来定义,有方法体,子类实现接口后可以直接使用接口中的普通方法(仍是 public 权限)。

为什么会在接口中有普通方法呢?

是这样的:假设JDK1.0有一个接口A,到了JDK8,已经有10W个子类实现了接口A,若JDK8想给接口A扩展一个新的方法,那是不行的,如果这样做了,那10W个子类都需要全部重写代码,所以这才有了接口中的普通方法。

二.JDK中常用的两大接口

1.java.lang.Comparable 接口

当一个类实现了 Comprable 接口,就表示当前类具备了可比较的能力(覆写其中的compareTo方法)。

2.java.lang.Clonable接口和深浅拷贝

(1).java.lang.Clonable接口

  • 当一个类实现了Cloneable接口,这个类就具备了可被"克隆"的能力(使用clone方法)。

        克隆指的就是对象B是根据对象A " 复制而来的 " ,这个复制不是简单的创建了两个引用指向同一个对象,确实产生了两个独立的对象,对象B所有属性和行为都是完全从对象A复制而来的,换句话说,对象B和对象A除了地址不同,其他完全相同,这样的操作称之为对象的 " 克隆 " 。

实现 Cloneable 接口后,啥方法都没覆写,也不会不报错。

这样的接口称之为标记接口。

标记接口:没有任何抽象方法的接口,不可省略,JVM只会识别所有带这个 Cloneable 接口的子类,打上可复制的标志。

(2).深浅拷贝

  • 浅拷贝:对象内部若包含其他类对象,浅拷贝只会复制其他类对象,并不会产生新的对象。
  • 深拷贝:克隆对象内部若包含其他对象的引用,会创建新对象,将源对象的内容复制过来。

Java中可以递归调用clone方法或者通过序列化的方式来实现深拷贝。

序列化与反序列化

  • 序列化:将任何对象变成字符串的过程。
  • 反序列化:从字符串中还原原来对象的过程称之为反序列化。 

如有建议或想法,欢迎一切讨论学习~ 

相关文章:

  • ant-design-vue 库 Loading 组件封装
  • 2022 年前端趋势的 技术发展情况
  • Observability:使用 Elastic Agent 来收集定制的 TCP 日志
  • 【C++】C++ 入门
  • Flink Kafka Sink 源码分析
  • 高斯消元法(2)——保姆级笔记
  • R语言因子分析全流程
  • Nginx简单配置 - 基础安全
  • 基于sdrpi的openwifi实践2:生成BOOT.BIN
  • 七、安装Centos7+8系统+超级优化
  • Kali-登录暴力破解器工具-medusa使用
  • 除砷树脂HP-776
  • 矿产行业供应链协同系统解决方案:构建数智化平台,保障矿产资源安全供应
  • 申请专利流程及费用。
  • HTML+CSS期末网页设计前端作品(大三)
  • codis proxy处理流程
  • css的样式优先级
  •  D - 粉碎叛乱F - 其他起义
  • express如何解决request entity too large问题
  • extract-text-webpack-plugin用法
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript创建对象的四种方式
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java到底能干嘛?
  • Linux快速复制或删除大量小文件
  • mongodb--安装和初步使用教程
  • PHP的类修饰符与访问修饰符
  • Python语法速览与机器学习开发环境搭建
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 简单易用的leetcode开发测试工具(npm)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端
  • 如何用vue打造一个移动端音乐播放器
  • 思考 CSS 架构
  • 提醒我喝水chrome插件开发指南
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # centos7下FFmpeg环境部署记录
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $().each和$.each的区别
  • ()、[]、{}、(())、[[]]命令替换
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2015)JS ES6 必知的十个 特性
  • (2022 CVPR) Unbiased Teacher v2
  • (a /b)*c的值
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)Sql Server 保留几位小数的两种做法
  • (转)大型网站的系统架构
  • (转)负载均衡,回话保持,cookie
  • .cn根服务器被攻击之后
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CLR基本术语