Object类位于:java.lang
Object类是所有类的根类,每个类都使用 Object 作为超类.其中提供了一些列对对象进行操作的方法
Object类中常用的方法:
(1) clone() 创建并返回此对象的一个副本
注意:Object类型的对象本身是无法访问clone()方法对其进行克隆的(参见:cn.com.object)。
它只能适用于继承了Object的子类对象
使用步骤:
1)定义一个继承了Object的子类类型,同时实现Cloneable接口;
作为Cloneable接口本身不包含clone()方法,该接口只是用于标识实现类可克隆
2)在子类中对Object父类中的clone()方法进行重写,以指定特定的克隆执行过程
克隆分类:
1)浅度克隆 (参见:cn.com.shallow.clone)
发生情况:如果被克隆对象所属类中包含基本类型或引用类型的属性,而在进行克隆
的时候只对包含基本类型或引用类型属性的外层对象进行克隆。对于其
内部包含的引用类型予以忽略的时候
执行效果:(1)外围被克隆的对象,会参照它产生一个独立的副本。副本中的引用类型的
属性与原对象采用复制方式,指向同一个堆空间
(2)对其中任何一个对象中的引用属性中的属性进行修改,都会影响到另一个
对象
2)深度克隆 (参见:cn.com.deep.clone)
发生情况:如果被克隆对象所属类中包含基本类型或引用类型的属性,而在进行克隆的时候
不仅对包含基本类型的或引用类型属性的外层对象进行克隆,还要对被包含的内层
引用类型的对象也进行克隆
执行效果:(1)外围被克隆的对象,会参照它产生一个独立的副本。同时,对其所包含的内层
对象也产生一独立的副本,指向一个新的堆空间
(2)对其中任何一个对象中的引用属性中的属性进行修改,都不会影响到另一个
对象
注意:
(1)在进行深度克隆的时候,被包含的引用类型的属性所属的类,都要实现Cloneable接口,
并且要重写Object类中的clone()方法
(2)在外层对象执行克隆的基础上,利用外层对象克隆后的新对象,对新外层对象中的引用属性
进行克隆,并将克隆后产生的新对象赋给,外层对象的副本中的引用
(2)equals(Object obj) 比较两个对象是否相等
注意:(1)Object类中的equals()底层实现如下:
this == obj
比较的是调用eqauls()的对象与以参数形式传递进去的obj对象,两者的引用地址是否相等
如果引用地址相等,返回true;否则,返回false
(参见:cn.com.object.method.equals.ObjectEquals.java)
(2) 如果想要在某个Object子类中自定义一种比较方式,那么,需要对Object中的equals()
进行重写
(3) 如果Object子类没有显示的重写Object中的eqauls方法,则在使用equals方法的时候
执行的是Object类中的equals()默认的执行过程
(3)getClass() 获取对象所属的具体类型信息 (参见:cn.com.object.method.getClass)
使用情况:在继承或实现关系中,将某个子类对象上传为其父类或接口类型,而在后期的操作过程中,
需要获取被向上转型为父类或接口类型的对象,所属的具体的类型信息
(4)toString() 将一个对象转换为字符串形式 (参见:cn.com.object.method.getClass中的Student;Teacher;School类)
注意: (1) Object类中的toString(),顶层是借助于Object类中的getClass()和hashCode()方法组合出一个字符串,
表示对象的引用地址
(2) toString()在使用System.out.println/pirint()语句输出的时候,会隐式的自动调用其toString()方法
(3) 对于自定义类,要在输出对象本身的时候,能有效地输出该对象内属性值信息,或以特定格式输出,那么,需要对
Object类中的toString()进行重写