Java-面向对象-Object类

92 阅读1分钟

Object类

是所有Java类的根父类。如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。

public class Person {
    //...
}
//等价于:
public class Person extends Object {
    //...
}

public class ObjectTest{

    public static void main(){
        Order order = new Order();
        System.out.println(order.getClass().getSuperClass());
    }
}
class Order{}
// 输出:class java.lang.Object

Object 类中的功能(属性、方法)具有通用性

image.png

Object类只声明了一个空参的构造器

equals方法

== 和 equals 有什么区别

== 的使用情况:可以使用在基本数据类型变量和引用数据类型变量中。

基本类型比较值:只要两个变量的值相等,即为true

引用类型比较引用(是否指向同一个对象):只有指向同一个对象时(地址值相等),==才返回true。

用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

equals的比较的是什么

equals 是一个方法,而不是一个运算符。只适用于引用数据类型。

在没有重写equals前,比较的是对象的地址。

Person s1 = new Person("tom");
Person s2 = new Person("tom");
System.out.println(s1.equals(s2));

// flase

因为String类重写了Object的equals方法。比较的不是地址值,而是值。

String s1 = new String("tom");
String s2 = new String("tom");
System.out.println(s1.equals(s2));

// true

equeals重写

通常情况下,自定义的类如果使用equals的话,也通常是比较两个对象的“实体内容”是否相同,那么,我们就要对Object类中的equals()进行重写。

class Person{
    String name;
    int age;
    
    @Override
    public boolean equals(Object o){
        if(this == o){
            return true;
        }
        
        if(o instanceof Person){
            Person p = (Person)o;
            //比较每个属性
            //if(this.age == o.age && this.name.equals(o.name)){
                //return true;
            //}else{
                //false
            //}
            return this.age == o.age && this.name.equals(o.name)
        }
        return false;
    
    }
}