1.Object类概述
java. lang.object类是Java语言中的根类,即所有类的父类。它的所有方法子类都可以使用。
如果一个类没有特别指定父类,那么默认则继承自 Object类。例如:
public class Person /*extends Object*/ {
// ...
}
2.toString方法
看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可,如果没有重写toString方法,那么打印的就是对象的地址值(默认),如果重写tostring方法,那么就按照重写的方式打印。
person类
package cn.itcast.day11.demo01;
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
主函数
package cn.itcast.day11.demo01;
import java.util.Random;
public class PersonObject {
public static void main(String[] args) {
Person per = new Person("赵丽颖",20);
System.out.println(per);
Random r = new Random();
System.out.println(r); //没有重写toString
}
}
执行结果
Person{name='赵丽颖', age=20}
java.util.Random@1e80bfe8
3.equal方法
Person类默认继承了object类,所以可以使用0bject类的equals方法
boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals方法源码:
public boolean equals(object obj) {
return (this == obj);
参数:
object obj: 可以传递任意的对象
比较运算符,返回的是一个布尔值true false
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
package cn.itcast.day11.demo01;
import java.util.Random;
public class PersonObject {
public static void main(String[] args) {
Person per = new Person("赵丽颖",20);
Person per2 = new Person("周冬雨",21);
System.out.println(per);
System.out.println(per2);
// System.out.println(per);
System.out.println("===============");
boolean b = per.equals(per2);
System.out.println( b);
// Random r = new Random();
// System.out.println(r); //没有重写toString
}
}
执行结果
cn.itcast.day11.demo01.Person@b4c966a
cn.itcast.day11.demo01.Person@2f4d3709
===============
false
4.重写Object类的equal方法
Object类的equals方法,默认比较的是两个对象的地址值,没有意义所以我们要重写equals方法,比较两个对象的属性(name, age)。
问题:
隐含着一个多态
多态的弊端:无法使用子类特有的内容(属性和方法)
object obj = p2 = new Person(“赵丽颖”, 19);
解决:可以使用向下转型(强转)把obj类型转换为Person
person类(重写了equal方法的类)
package cn.itcast.day11.demo01;
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj){
//使用向下转型,把obj转换成Person类型
Person p = (Person) obj;
//比较两个对象的属性,一个对象是this(p1),一个对象是p(obj->p2)
boolean b = this.name.equals(p.name) && this.age == p.age;
return b;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
主函数
package cn.itcast.day11.demo01;
import java.util.Random;
public class PersonObject {
public static void main(String[] args) {
Person per = new Person("赵丽颖",20);
Person per2 = new Person("周冬雨",21);
Person per3 = new Person("周冬雨",21);
System.out.println(per);
System.out.println(per2);
// System.out.println(per);
System.out.println("===============");
boolean b = per.equals(per2);
boolean b1 = per2.equals(per3);
System.out.println( b);
System.out.println(b1);
// Random r = new Random();
// System.out.println(r); //没有重写toString
}
}
执行结果
cn.itcast.day11.demo01.Person@b4c966a
cn.itcast.day11.demo01.Person@2f4d3709
===============
false
true