Object类是所有类的父类,如果一个类没有明确的继承自另外一个类,则肯定继承Object类。
class Demo{}
等价于以下的代码:
class Demo extends Object{}
|
那么既然Object类是所有类的父类,那么就意味着,所有类的对象都可以使用Object接收。
那么在开发中,如果要想编写一个完整的类,应该最少覆写Object类中的以下几个方法:
· toString:public Sting toString(),对象打印的时候默认调用
· equals:public boolean equals(Object obj),对象比较
· hashCode:public int hashCode()
1、 toString()方法是在对象打印的时候默认调用的
class Person{
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person() ;
System.out.println(p) ;
}
};
|
以上程序打印的结果为:
Person@757aef
|
如果在以上打印的时候把打印语句编写为:“System.out.println(p.toString()) ;”,则效果与之前是一样的,那就证明,在打印对象的时候实际上调用toString()方法,是默认调用的。此方法为Object。
如果现在在Person类中覆写了toString()方法:
class Person{
public String toString(){
return "HELLO WORLD!!!" ;
}
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person() ;
System.out.println(p) ;
}
};
|
则打印结果为:
HELLO WORLD!!!
|
实际上可以在toString()中编写更多的输出内容,如:以下代码:
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "
姓名:
"+this.name+"
,年龄:
"+this.age ;
}
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person("
张三
",30) ;
System.out.println(p) ;
}
};
|
2、 equals:对象比较
是对象比较的方法,String是Object的子类,所以Strin本身已经根据自己的情况覆写好了equals方法了。
之前讲解过?如何区分两个对象是否一样?实际上这样的方法,应该写在equals之中。
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){
if(this==obj){
return true ;
}
if(!(obj instanceof Person)){
return false ;
}
Person p = (Person)obj ;
if(this.name.equals(p.name)&&this.age==p.age){
return true ;
}else{
return false ;
}
}
public String toString(){
return "
姓名:
"+this.name+"
,年龄:
"+this.age ;
}
};
public class Demo14{
public static void main(String artgs[]){
Person p1 = new Person("
张三
",30) ;
Person p2 = new Person("
张三
",30) ;
System.out.println(p1.equals(p2)) ;
}
};
|
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/96926,如需转载请自行联系原作者