Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
1、toString方法
(1)直接继承
public class Person01 {
private String nickname;
private int age;
private int gender;
public Person01() {
}
public Person01(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
@Test
public void test02(){
Person01 person01 = new Person01();
//子类Person01默认继承了Object类,因此可以调动Object类的方法
System.out.println(person01.toString());
}
运行结果:com.lihaozhe.bean.Person01@19dc67c2
可以看到默认的toString是包名.类名@哈希值
(2)重写toString方法
@Override
//还是上边的类,仅仅添加了一个重写父类的代码
public String toString() {
return "Person02( nickname = " + this.nickname + ", age = " +this.age + ", gender = " + this.gender +" )";
}
@Test
public void test02() {
Person02 Person02 = new Person02("张三", 20, 1);
System.out.println(Person02.toString());
}
运行结果为:Person02( nickname = 张三, age = 20, gender = 1 )
可以看到新的toString是我们自己重写的
2、equals方法
(1)直接继承
public class Person03 {
private String nickname;
private int age;
private int gender;
public Person03() {
}
public Person03(String nickname, int age, int gender) {
this.nickname = nickname;
this.age = age;
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
@Test
public void test02() {
Person03 person01 = new Person03("张三", 40, 1);
Person03 person02 = new Person03("李四", 18, 0);
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
}
@Test
public void test03() {
Person03 person01 = new Person03("张三", 40, 1);
Person03 person02 = new Person03("张三", 40, 1);
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
}
运行结果分别为
test02:false false
test03:false false
可以看到当属性不同时,无论时比较(==)还是equals方法,输出结果均为false
(2)重写equals方法
@Override
public boolean equals(Object obj) {
//还是上边的类,仅仅添加了一个重写父类的代码
// 传进来的比较的对象
Person04 person04 = (Person04) obj;
if (this.age != person04.getAge()) {
return false;
} else if (this.gender != person04.getGender()) {
return false;
} else if (!Objects.equals(this.nickname, person04.getNickname())) {
return false;
} else {
return true;
}
}
@Test
public void test01() {
Person04 person01 = new Person04("张三", 40, 1);
Person04 person02 = new Person04("李四", 18, 0);
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
}
@Test
public void test02() {
Person04 person01 = new Person04("张三", 40, 1);
Person04 person02 = new Person04("张三", 40, 1);
System.out.println(person01 == person02);
System.out.println(person01.equals(person02));
}
输出结果分别为
test01: false false
test02:false true
此时可以看到,重写之后我们的equals方法比较的时属性,而不再是哈希值,因此当属性相同时,输出的结果为true