1.Object类
Object类是所有类的父类,所有类默认继承Obeject类
class Person{}
public class Test {
public static void main(String[] args) {
fun(new Test());
fun(new Person());
}
public static void fun(Object obj){
System.out.println(obj);
}
}
由此可见,Object类可以接收所有的对象。
1.1 常用方法
1.1.1 toString()方法
toString()方法:取得对象信息
class Person{
private String name;
private int age;
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;
}
}
public class Test {
public static void main(String[] args) {
Person per = new Person("张三",20);
String str = "hello";
fun(per);
fun(str);
}
private static void fun(Object obj){
System.out.println(obj.toString());
System.out.println(obj);
}
}
System.out.println()系统输出 输出对象时,默认会调用该对象的 toString() 方法
//Object类的toString方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//String类的toString方法
public String toString() {
return this;
}
若自定义类需要进行内容的输出,需要覆写toString()方法
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "姓名:"+this.name+" 年龄:"+this.age;
}
}
public class Test {
public static void main(String[] args) {
Person per = new Person("张三",20);
String str = "hello";
fun(per);
fun(str);
}
private static void fun(Object obj){
System.out.println(obj.toString());
System.out.println(obj);
}
}
1.1.2 equals()方法
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Person per = new Person("张三", 20);
Person per1 = new Person("张三", 20);
System.out.println(per.equals(per1));
}
}
equals方法表示的是内容相等,但是我们可以看出per的内容和per1的内容相等,但是为什么会返回false呢,我们来看一下Object的equals方法:
public boolean equals(Object obj) {
//this表示当前对象 obj是要比较的对象 ==比较的是地址
return (this == obj);
}
Object类提供的equals方法默认比较的是两个对象的地址是否相同,要想比较内容,就必须覆写Object类的equals方法
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
//1.如果obj为空 直接返回null
if(obj == null){
return false;
}
//2.如果两个对象的地址相同 直接返回true
if(this == obj){
return true;
}
//3.如果obj不是Person类的实例
if(!(obj instanceof Person)){
return false;
}
//此时需要比较两个Person对象的内容
//obj现在还是属于Object类、向下转型转为Person类
Person per = (Person)obj;
return per.age == this.age &&
per.name.equals(this.name);
}
}
public class Test {
public static void main(String[] args) {
Person per = new Person("张三", 20);
Person per1 = new Person("张三", 20);
System.out.println(per.equals(per1));
}
}