java三个特殊类之Object类

版权声明:白小姐 https://blog.csdn.net/bailerong123/article/details/89280990

Object类简介

Object是java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用我们的Object进行接受。
范例,使用Object接受所有类的对象

package ObjectTest;
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);
    }
}

运行结果:

ObjectTest.Person@1540e19d
ObjectTest.student@677327b6

所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法

Object类里面的设置好的方法

No 方法名称 类型 描述
1 public Object() 构造 无参构造为子类服务
2 public String toString 普通 取得对象信息
3 public boolean equals(Object obj) 普通 对象比较

取得对象信息

在使用对象直接输出的时候,默认输出的是一个地址编码,如果现在使用的是String类,该类对象直接输出的是内容,主要原因就是toString()方法的问题。
覆写toString()方法

package ObjectTest;
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) {
        fun(new Person("lele",25));
        fun("hello");
    }
    public static void fun(Object obj){
        System.out.println(obj.toString());
    }
}

toString()的核心目的在于取得对象信息
String作为信息输出的重要数据类型,在java中所有的数据类型只要遇见了String并且执行l“+”,那么都将要求变为字符串后链接,而所有对象想要变为字符串就默认使用toString()方法
观察toString()方法

package ObjectTest;
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) {
        String msg="hello"+new Person("lele",25);
        System.out.println(msg);
    }
 
}

对象比较

String类对象的比较使用的是equals()方法,实际上String类的equals()方法覆写Object类中的equals()方法。
实现对象比较

package ObjectTest;
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;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null)
            return false;
        if(this==null)
            return true;
        //如果obj不是person类的对象
        if(!(obj instanceof Person))
            return false;
        Person person=(Person)obj;//向下转型,比较属性值
        return this.name.equals(person.name)&&this.age==person.age;
    }
}
public class Test {
    public static void main(String[] args) {
       Person per1=new Person("lele",18);
       Person per2=new Person("lele",18);
        System.out.println(per1.equals(per2));
    }
   
}

接收引用数据类型

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

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

在Object中接收接口

在Object可以接受接口是java中强制要求,因为接口本身不能继承任何类
使用Object’接收接口对象

package ObjectTest;
interface IMessage{
    public void getMessage();
}
class MessageImpl implements IMessage{
    @Override
    public String toString() {
        return "pretty";
    }

    @Override
    public void getMessage() {
        System.out.println("lele");
    }
}
public class Test {
    public static void main(String[] args) {
  IMessage msg=new MessageImpl();//子类向父接口转型
        Object obj=msg;//接口向我们的Object类转型
        System.out.println(obj);
        IMessage temp=(IMessage) obj;//强制类型转型
        temp.getMessage();
    }

}

猜你喜欢

转载自blog.csdn.net/bailerong123/article/details/89280990