接口
什么是接口
语法:使用interface来定义
接口当中的成员变量默认是public static final的,接口中的每一个方法默认是抽象方法,
接口不能存在普通的方法,要想存在普通的只有被static和default修饰的方法,
接口不能通过new关键字进行实例话,类和接口是可以通过implements来实现关系的,接口也是可以向上转型和动态绑定的
接口是不能有构造放法和代码块
当一个类实现接口当中的方法之后,当前类当中的方法不能不加pulblic
一个接口也会产生独立的字节码文件
类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
类实现一个接口,要重写接口的所有的方法
接口就是为了实现无法多继承
实现多接口
需要先有继承之后,在实现接口,后面的接口需要用逗号隔开
当一个类继承了另一个类,同时有实现了多个接口,如果想要实现某一个功能,只需要把接口作为参数类型定义一个方法,然后所有实现的这个接口都可以调用这个方法,而不在需要调用父类来进行,从而达到代码的灵活性
接口的继承
当一个接口想要继承另一个接口或者多个接口时可以使用extends来实现,但是最后实现的时候,要重写所有的方法
Object类是所有类的父类,当你的类没有继承或者被继承,都是默认继承Object类,所有类的对象都可以使用Object的引用来接收
(toString)获取对象信息:
当我们的这里没有重写toString时自动调用系统自带的
是输出对象的虚拟的全路径的地址,
当我们重写了一个toString,就相当于父类引用了一个子类对象,就发生的向上转型(原码)
输出的就是获取到的信息
对象比较equals
当我们想要比较对象的内容是否相同时可以使用equals,但是如果不重写equals使用系统自带的,系统会默认比较的是他们的一个虚拟地址
而我们手动重写equals,就可以实现比较对象里面的内容是否相同
引用类型比较方法
自定义类型使用compareable这个接口来进入,重写compareto方法实现比较多逻辑,
使用compareable这个接口进行比较,对类的侵入性比较强,
当我们想要比较比如说名字大小时,可以使用comparator,且对类的侵入性不强,代码会相对比较灵活,comparator是可以和compareable共存的
Clonable接口和深浅拷贝
object是所有子类的父类,里面包含着clone的方法,为什么不能实现克隆
1.因为访问权限的问题,protected是访问不同包子类访问是要使用super来调用,所以只能重写clone方法
2.clone方法的异常是受查异常/编译时异常,需要把throws以及后面的放在main函数后面
3.clone方法的返回值是object而我们克隆是向下转型,需要强制类型转换
4.自定义类型想要实现克隆需要实现cloneable这个接口
cloneable接口是证明当前类是可以被克隆的
浅拷贝就是只拷贝了对象,并没有拷贝对象里面的对象
深拷贝:
重写拷贝方法,就是创建实例话一个临时变量的拷贝,在用这个临时变量去调用拷贝的方法,最后在返回,就可以达到拷贝对象里面的对象,同时也可以更改深拷贝对象里面的内容
写在需要拷贝的方法里面