📄 09_object_day05.txt
字号:
Object
clone
Object类的clone()方法.覆盖之后调用父类的clone()方法,完成对protect属性或方法的调用.
对象的克隆里面还要注意:
让一个对象可以拷贝,有两个工作:
1.覆盖Object方法.
2.实现Cloneable接口,表示这个类可以被克隆.
接口中如果没有方法,那么它被称为标记接口,它仅仅是为了标记的作用没有实际的含义.功能接口是为了扩展一个类的功能,有具体的方法.
除了实现克隆之外克隆还有两种形式:浅拷贝和深拷贝.
浅拷贝:
拷贝对象的时候,基本类型的属性完成拷贝,对象类型的拷贝只拷贝了引用值.
深拷贝:
拷贝对象时候,把对象类型的属性重新创建一份拷贝过来.
例子
CloneTest
Animal
Person owner
Person
标记接口
Cloneable接口,意义是让instanceof标识符可用.
equals
判断当前对象和参数中的对象是否相等,
再Object中定义的equals方法返回的就是用==判断的结果.
这里的意思是,所有类的对象都能够去比较的,但是具体对象的判断是否相当是不能确定的,所以这个是否相等的判断规则需要由类的定义者类实现的.
所以我们需要去覆盖这个Object对象equals方法给我定义的类来判断两个对象是否相等.
注意形参传入的Object对象:在方法内部要做强制类型转换.参数Object类型不可以改变,改变了就为背了方法覆盖的原则.
比较相等的前提就是比较他们是否是同一个类型的对象.instanceof
equals方法的覆盖java提出了一些约定:约定俗成
在Object文档中由规范的具体描述.
equals 方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false
finalize
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。
一个对象在被垃圾回收器之前被调用一次,一般情况下把一些释放资源的代码写在这里.
toString
返回对这个对象的一个字符串的描述.
在程序中直接的输出一个对象,在任何情况下,我们希望得到对象的字符串的描述,那么就会去调用对象的这个方法.
还剩7个在后面的课程里面是都会一一讲到的.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -