Object类
Object是所有对象的直接或者间接父类,该对象中定义的是所有对象都具备的功能,
Object类中几个常用的方法
- equals方法:判断两个对象是否相等,一般这个方法被复写,用于判断两个对象的值是否相等
多态在Object类中的应用
class Demo{
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj)//Objcet object=new Demo();
{
Demo d=(Demo)obj;
return this.num==d.num;
}
}
public class ObjectDemo {
public static void main(String[] args) {
Demo d1=new Demo(4);
Demo d2=new Demo(6);
Demo d3=d1;
System.out.println(d1.equals(d2));
}
}
我们重写Object中的equals方法,就可以做到比较两个对象的值是否相等
再对上面代码进行小小的改动,添加一个新的类,
class Demo{
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj)//Objcet object=new Demo();
{
Demo d=(Demo)obj;
return this.num==d.num;
}
}
class Other{
}
public class ObjectDemo {
public static void main(String[] args) {
Demo d1=new Demo(4);
Demo d2=new Demo(6);
System.out.println(d1.equals(d2));
Other o=new Other();
System.out.println(d1.equals(o));
}
}
我们用创建的o对象和d1进行比较,结果会抛出类型转换异常,因为Demo和Other这两个类虽然都是Object的子类,但是这两个类没有任何关系,所以不能把这两个类进行比较,我们在重写Object类的equals方法进行如下改动
public boolean equals(Object obj)//Objcet object=new Demo();
{
if(!(obj instanceof Demo))
return false;
Demo d=(Demo)obj;
return this.num==d.num;
}
在比较之前做个判断,就不会抛出类型转换异常了。
- toString方法:它的作用是返回该对象的字符串表示
class Demo{
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj)//Objcet object=new Demo();
{
if(!(obj instanceof Demo))
return false;
Demo d=(Demo)obj;
return this.num==d.num;
}
}
public class ObjectDemo {
public static void main(String[] args) {
Demo d1=new Demo(4);
Class c=d1.getClass();//返回该对象的运行时类
System.out.println(c.getName());//打印类名
System.out.println(Integer.toHexString(d1.hashCode()));
System.out.println(c.getName()+"@"+Integer.toHexString(d1.hashCode()));
System.out.println(d1.toString());
}
}
运行结果:
video_exercise.Demo
1540e19d
video_exercise.Demo@1540e19d
video_exercise.Demo@1540e19d