Object类的概述和重要方法
-
Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类
-
构造方法:public Object()
-
public boolean equals(Object obj);比较对象是否相等,默认比较地址,重写可以比较内容,自动生成
-
public String toString();返回对象字符串表示形式,建议所有子类重写该方法,自动生成
-
回想面向对象中,为什么子类构造方法默认访问的是父类的无参构造方法?
因为他们的顶级父类只有无惨构造方法
以图文和代码形式讲解:
图:建立Demo测试类和student类(默认继承Object类)
没重写的情况下:
- Student类
package CCom.Cnn;
public class Student{
//此时默认继承Object祖宗类
private String name;
private int age;
public Student() {
}
public Student(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;
}
}
- Demo类
package CCom.Cnn;
public class Demo {
public static void main(String[] args) {
Student s = new Student();
Student s2 = new Student();
s.setName("沸羊羊");
s.setAge(18);
System.out.println(s.getName()+s.getAge());
System.out.println(s.equals(s2));//比较的是地址是否相等
System.out.println(s);//CCom.Cnn.Student@1b6d3586
}
}
输出的结果:
沸羊羊18
false
CCom.Cnn.Student@1b6d3586
有重写的情况下:
- Student类
package CCom.Cnn;
import java.util.Objects;
public class Student{
//此时默认继承Object祖宗类
private String name;
private int age;
public Student() {
}
public Student(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;
}
//重写toString()方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//重写equals(Object o)方法
@Override
public boolean equals(Object o) {
//this---s o---s2
if (this == o) return true;//比较地址是否相等
if (o == null || getClass() != o.getClass()) return false;//判断s2地址是否为空或者类名下s类是否等于s2类
Student student = (Student) o;//前两个都满足,则向下转型让student=s2
return age == student.age && Objects.equals(name, student.name);//比较s下的age和name内容是否等于student(student=s2)下的age和name内容
}
}
注意学生类的重写方法
- Demo类
package CCom.Cnn;
public class Demo {
public static void main(String[] args) {
Student s = new Student();
Student s2 = new Student();
s.setName("沸羊羊");
s.setAge(18);
s2.setName("沸羊羊");
s2.setAge(18);
System.out.println(s.getName()+s.getAge());
System.out.println(s.equals(s2));//子类重写后比较的是内容是否相等
System.out.println(s);//子类重写后更加清晰看清我们返回字符串的内容
/*
equals(Object obj)重写后比较内容的原因:
public boolean equals(Object obj) {
return (this == obj);
}
*/
/* toString()重写返回对象字符串的内容地址的原因:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*/
}
}
输出的结果:
沸羊羊18
true
Student{name=‘沸羊羊’, age=18}