【Java】三大特殊类之------Object类

三大特殊类

  • String类
  • Object类
  • 包装类

Object类:

----Object类是所有类的父类,所有类默认继承Object类.
(接收所有类的对象)

class Person{ }
class Student{ }
public class Test{
    public static void main(String[] args) {
        fun(new Person());
        fun(new Student());
    }
    public static void fun(Object obj){
        System.out.println(obj);
    }
 }

I.toString():取得对象信息

  • System.out.println()系统输出对象时,默认会调用该对象的toString()方法.
    (因为所有类都是Object类的子类,Object提供的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;
    }
    //覆写toString()方法
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";//系统提供的String类
        fun(per);//调用fun接收Per
        fun(str);//调用fun接收str
    }
    public static void fun(Object obj){ //通过Object类接收
        System.out.println(obj.toString()); //调用toString方法
    }
}
//为何String类调用会输出内容,而Person类确输出的不是内容
//原因在于toString(取得对象信息)

II.equals():比较两个对象内容*

  • Object类提供的equals:默认比较两个对象的地址是否相同

举例:
以下代码**两个判断,一个比较,三步走 **

class Person{
    private String name;
    private int 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;
    }
    public String toString(){
        return "姓名为:"+this.name+",年龄为:"+this.age;
    }

    @Override
    public boolean equals(Object obj) {
              //**1.判断地址是否相同**
        if(obj == this){
            return true;
        }
              //2.**判断传进来的值是否是(指向)Person对象**
        if( !(obj instanceof Person)){ 
             //instanceof(当前引用能否指向Person类)向上向下转型
            //取反,传进去的不是Person对象;
            return false;
        }
            //3**.此时需要比较两个Person对象的内容
            //需要向下转型转回Person对象后比较两者的属性内容**
        Person per = (Person) obj;
        return this.age == per.age  //先比属性值
                && this.name.equals(per.name);
    }
}
public class Test {
    public static void main(String[] args) {
        Person per1 = new Person("张三", 20);
        Person per2 = new Person("张三", 20);
        Person per3 = new Person("张三", 22);
        System.out.println(per1.equals(per2));
        System.out.println(per2.equals(per3));
    }
}

运行结果:
在这里插入图片描述

III.Object类可以接收所有引用类型,包括接口与数组

举例:

interface IMessage{
    void getMsg();
}
class MessageImpl implements IMessage{
    public void getMsg(){ }
}
public class Test {
    public static void main(String[] args) {
        IMessage msg = new MessageImpl();
        Object obj1 = msg;
        int[] data = new int[10];
        Object obj2 = data;
        System.out.println(obj1);
        System.out.println(obj2);
    }
}

IV.Object类是参数的最高统一类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值