java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类,那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {
狗不吃https://www.zhihu.com/question/372269771/answer/1366197609
}
1、Object是java提供的功能类(API中的类)和开发人员自己书写的类的父类;
2、因为所有的类都继承了Object类,所以继承了Object类的子类可以使用Ojbect类中的功能(函数);
疑问:既然自己定义的类也要继承Object类,那为什么在代码中没有显式书写继承Object?
Object类属于java.lang包下。而java.lang包会被JVM在运行时自动加载,继承了Object的子类也不需要显式书写,JVM会自动为书写的类添加继承。
Object类中的常用函数:
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
package equals;
import java.util.Objects;
class Student {
private String name;
private int age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public boolean compareAge(Student student) {
return this.age == student.age;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Student student = (Student) o;
return age == student.age && name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("zhangsan", 18);
Student s2 = new Student("lisi", 18);
Class<? extends Student> aClass = s1.getClass();
boolean flag = s1.equals(s2);
System.out.println("flag = " + flag);
boolean flag2 = s1.compareAge(s2);
System.out.println("flag2 = " + flag2);
System.out.println("s1 = " + s1);
int i = s1.hashCode();
System.out.println("i = " + i);
int i1 = s2.hashCode();
System.out.println("i1 = " + i1);
}
}