边学边记——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方法或者通过序列化的方式来实现深拷贝。
序列化与反序列化
- 序列化:将任何对象变成字符串的过程。
- 反序列化:从字符串中还原原来对象的过程称之为反序列化。
如有建议或想法,欢迎一切讨论学习~