资源描述
重写ToString和equals方法
一、 重写toString()方法
为什么要重写toString()方法 在Object类里面定义toString()方法的时候返回的对象的哈希code码,这个haxicode码不能简单明了的表示出对象的属性。所以要重写toString()方法。
当需要将一个对象输出到显示器时,通常要调用他的toString()方法,将对象的内容转换为字符串.java中的所有类默认都有一个toString()方法
默认情况下 System.out.println(对象名)或者System.out.println(对象名.toString())输出的是此对象的类名和此对象对应内存的首地址如果想自定义输出信息必须重写toString()方法
注意事项
1.必须被声明为public
2.返回类型为String
3.方法的名称必须为toString,且无参数
4. 方法体中不要使用输出方法System.out.println()
二、 重写equals()方法
为什么要重写equals()方法 在Object类里面定义的equals比较的是对象的引用是否指向同一块内存地址。 一般情况下比较两个对象时比较他的值是否一致,所以要进行重写。重写之后是为了比较两个对象的value值是否相等。 特别指出,利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它对象都是比较的引用地址。
注意事项
重写equals必须注意:
* 1 自反性:对于任意的引用值x,x.equals(x)一定为true
* 2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true
* 3 传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返 回 true
* 4 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改,
* 多次调用x.equals(y)要么一致地返回true,要么一致地返回false
* 5 非空性:对于任意的非空引用值x,x.equals(null)一定返回false
三、 示例
1. 重写前面定义的“Person”类和“Student”类的toString及equals方法,并编程测试。
程序如下:
class Person
{ int i;
Person()
{
}
Person(int i)
{
this.i=i;
}
public String toString()
{
return "我叫Mary";
}
public boolean equals(Object obj)
{
Person p1=(Person) obj;
if(this.i==p1.i)
return true;
else
return false;
}
}
class Student extends Person
{
int x,y;
Student(int x,int y )
{
this.x=x;
this.y=y;
}
public String toString()
{
return "我是计算机系计科09级学生";
}
public boolean equals(Object obj)
{
Student s1=(Student) obj;
if(this.i==s1.i)
return true;
else
return false;
}
}
public class TestPerson
{ public static void main(String args[])
{
Person p1=new Person(2);
Person p2=new Person(2);
Student s1=new Student(3,4);
Student s2=new Student(3,4);
System.out.println(p1.equals(p2));
System.out.println(s1.equals(s2));
System.out.println(p1);
System.out.println(s1);
}
}
运行结果:
2.根据上面的程序,构造“Teacher”类,继承“Person”类,要求:
(1)增加“职称(String)”属性;
(2)具有和“Student”类类似的构造重载方法;
(3)重写“Person”类的info()方法,增加“职称”信息。
程序如下:
class Person
{
String name;
long id;
int age;
Person()
{
}
Person(String name ,long id,int age)
{
this.name=name;
this.id=id;
this.age=age;
}
void info()
{
System.out.println("我的信息是:"+"姓名="+name+"; " +"证件号="+id+"; " +"年龄="+age);
}
}
class Teacher extends Person
{
String name;
long id;
int age;
String profession;
Teacher(String _name,long _id,int _age,String profession)
{
name=_name;
id=_id;
age=_age;
this.profession=profession;
}
void info()
{
System.out.println("我的信息是:"+"姓名="+name+"; " +"证件号="+id+"; " +"年龄="+age+"; " +"职称="+profession);
}
}
public class TestPerson2
{
public static void main(String args[])
{
Person p1=new Person("张三",65780,25);
Teacher t1=new Teacher("王宇",23790,27,"讲师");
p1.info();
t1.info();
}
}
运行结果:
展开阅读全文