一.Object类的基本定义:

Object类是所有类的父类,也就是说任何一个类在定义时如果没有明确地继承一个父类,那么它就是Object类的子类。

class Book {
}
class Book extends Object {
}

所以上面两种类定义的最终效果是完全相同的。

二.利用Object类来接收对象:
class Book extends Object {
}
public class TestDemo {
    public  static void main(String args[]) {
        Object obja = new Book() ;
        Object objb = "hello" ;
        Book b = (Book)obja;
        String s = (String)objb;
    }
}

本程序为了测试Object可以接收任意类对象,使用Book类与String类实现了向上与向下转型操作。所以在设计代码时。如果不确定参数类型时,使用Object类是最好的选择。

三.取得对象信息:toString()
class Book extends Object {

}
public class TestDemo {
    public  static void main(String args[]) {
        Object obja = new Book() ;
        Object objb = "hello" ;
       System.out.println(obja) ;
       System.out.println(obja.toString());
       System.out.println(objb) ;
    }
}

在输出对象时不管是否调用toString(),其最终都是调用toString()将对象信息转换为String进行输出,而在Object类中的toString()方法设计时,由于要考虑其可以满足所有对象的输出信息,所以默认返回的是对象的编码。而之所以String类对象输出的时候没有输出编码,是因为在String类中已经明确覆写了toString()方法。
覆写toString()方法:

class Book {
    private String title ;
    private double price ;
    public Book(String title , double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return "书名:" + this.title + ",价格" + this.price ;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        Book b = new Book("Java开发",79.9) ;
        System.out.println(b);
    }
}

本程序在Book类中覆写了toString()方法,而在进行对象输出时,就可以发现会自动调用对象所在类的toString()方法将对象转变为字符串后输出。

四.对象比较:equals()

在Object类中,默认的equals()方法实现比较的是两个对象的内存地址数值,但是并不符合真正的对象比较需要。

class Book {
    private String title ;
    private double price ;
    public Book(String title , double price) {
        this.title = title ;
        this.price = price ;
    }
    public boolean equals(Object obj) {
        if (this == obj) {
            return true ;
        }
        if (obj == null) {
            return false ;
        }
        if (!(obj instanceof Book)) {
            return false ;
        }
        Book book = (Book) obj ;
        if (this.title.equals(book.title) && this.price == book.price) {
            return true ;
        }
        return false ;
    }
    public  String toString() {
        return "书名:" + this.title + ",价格:" + this.price ;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        Book b1 = new Book("Java开发",79.9) ;
        Book b2 = new Book("Java开发",79.9) ;
        System.out.println(b1.equals(b2));
    }
}
五.Object类与引用数据类型:

1.接收数组数据:

public class TestDemo {
    public static void main(String args[]) {
        Object obj = new int[] {1,2,3} ;
        System.out.println(obj) ;
        if (obj instanceof int[]) {
            int data[] = (int[])obj ;
            for (int x=0 ; x<data.length ; x++) {
                System.out.println(data[x] + "、");
            }
        }
    }
}

本程序首先将数组对象向上转型为Object类型,然后利用instanceof关键字判断当前的Object类对象是否为int型数组,如果条件判断满足,则进行输出。
2.接收接口对象:

interface A {
    public void fun() ;
}
class B extends Object implements A {
    public void fun() {
        System.out.println("!!!");
    }
    public String toString() {
        return "....." ;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        A a = new B() ;
        Object obj = a ;
        A t = (A)obj ;
        t.fun();
        System.out.println(t);
    }
}

本程序定义了一个A接口的子类B并且覆写了A接口的fun()方法,然后主方法为了测试转型,先将接口对象向上转型为Object类型,再将其向下转型为A接口实例,最后调用fun()方法以及直接输出接口对象