一.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()方法以及直接输出接口对象