Java学习——Object类

Object类

Object类是jdk默认提供的一个类,Java中除了Object类,所有类都存在继承关系,默认会继承Object父类。即所有类都是Object类的子类。

Object展现了最高的参数统一化——所有类的对象都可以使用Object进行接收。

一、Object类中两个重要的方法

1.toString()——取得对象信息

class Test{
    public static void main(String[] args) {
        fun(new Person("张三",25) );
    }
    public static void fun(Object obj) {
        System.out.println(obj.toString()); 
    }
}
class Person{
    private String name ;
    private int age;
    public Person(String name,int age){
       this.name = name;
       this.age = age;
    }
}//输出 Person@3b192d32

通过以上代码发现,Object类中的toString()方法只是简单输出当前所引用的类名称以及对象地址。(而这是所有对象都共同具备的特征)。如若觉得默认给出的toString()方法功能不足,就在需要的子类上覆写toString()方法。

class Test{
    public static void main(String[] args) {
        fun(new Person("张三",25) );
    }
    public static void fun(Object obj) {
        System.out.println(obj.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 "姓名:"+name + "  年龄:"+age;
    }
}//输出 姓名:张三  年龄:25

2.equlas()——对象比较

class Test{
    public static void main(String[] args) {
        Person per1 = new Person("张三",20);
        Person per2 = new Person("张三",20);
        System.out.println(per1.equals(per2));
    }
}
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.age = age;
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        //1.首先判断obj是否是Person类对象
        if(!(obj instanceof Person)){
            return false;
        }
        //2.判断当前对象是否和传入对象地址相同
        if(this == obj){
            return true;
        }
        //3.obj确实是Person类对象,比较两者属性内容
        //向下转型取得Person的属性值
        Person per = (Person) obj;
        return ((this.name.equals(per.name) && this.age == per.age));
    }
}

二、接收引用数据类型

在之前已经分析了Object可以接收任意的对象,因为Object是所有类的父类,但是Obejct并不局限于此,它可以接
收所有数据类型,包括:类、数组、接口。

使用Object来接受数组对象:

public class Test {
    public static void main(String[] args) {
        // Object接收数组对象,向上转型
        Object obj = new int[]{1,2,3,4,5,6} ;
        // 向下转型,需要强转
        int[] data = (int[]) obj ;
        for(int i :data){
            System.out.println(i+"、");
        }
    }
}

使用Object接收接口对象:

interface IMessage {
    void getMessage();
}
class MessageImpl implements IMessage {
    @Override
    public String toString() {
        return "Hello" ;
    }
    @Override
    public void getMessage() {
        System.out.println("World");
    }
}
public class Test {
    public static void main(String[] args) {
        IMessage msg = new MessageImpl(); // 子类向父接口转型
        Object obj = msg; // 接口向Obejct转型
        System.out.println(obj);
        IMessage temp = (IMessage) obj; // 强制类型转换
        temp.getMessage();
    }
}

Object真正达到了参数的统一,如果一个类希望接收所有的数据类型,就是用Object完成。

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83473480