Object类的基本定义
Ø Object类是所有类的父类,也就是说任何一个类在定义的时候如果没有明确的继承一个父类的话,那么它就是Object类的子类,也就是说以下两种类定义的最终效果是完全相同的:
class Book {
}
等价于
class Book extendsObject {
}
Object类是所有类的父类,最大的好处在于利用object类可以接收所有类的对象,因为可以向上自动转型。
利用Object类来接收对象
class Book extends Object {
}
public class TestDemo {
public static void main(String args[]) {
Object obja = new Book(); // 向上转型,接收Book子类对象
Object objb = "hello"; // 向上转型,接收String子类对象
Book b = (Book) obja; // 测试向下转型
String s = (String) objb; // 测试向下转型
}
}
执行没有错误,所以在不确定参数类型的时候,使用object类型会是很好的选择
Object类的部分方法
取得对象信息:toString()
class Book extends object{ // 此类为Object子类
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
public String toString() { // 替代了getInfo(),并且toString()可以自动调用
return "书名:" + this.title + ",价格:" + this.price;
}// setter、getter、无参构造略
}
public class TestDemo {
public static void main(String args[]) {
Book b = new Book("Java开发", 79.9); // 实例化对象
System.out.println(b); // 直接输出对象,默认调用toString()
}
}
程序执行结果:
书名:Java开发,价格:79.9
实现对象比较
public boolean equals(Object obj) {
if (this == obj) { // 地址相同
return true;
}
if (obj == null) { // 对象内容为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;
}
Object类与引用数据类型
Ø Object是所有类的父类,那么Object类可以接收所有类的对象,但是在Java设计的时候,考虑到引用数据类型的特殊性,所以Object类实际上是可以接收所有引用数据类型的数据,这就包括了数组、接口、类。
接收数组数据
public class TestDemo {
public static void main(String args[]) {
Object obj = new int[] { 1, 2, 3 }; // 向上转型
System.out.println(obj); // 数组编码:[I@1db9742
if (obj instanceof int[]) { // 谁否是int数组
int data[] = (int[]) obj; // 向下转型
for (int x = 0; x < data.length; x++) {
System.out.print(data[x] + "、");
}
}
}
}
程序执行结果:
[I@1db9742(“System.out.println(obj);”语句执行结果)
1、2、3、
Object类接收接口对象
interface A {
public void fun();
}
class B extends Object implements A { // 所有类一定继承Object类,所以此处只是强调说明
public void fun() {
System.out.println("ww");
}
public String toString() {
return "aa" ;
}
}
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); // 直接调用toString()输出
}
程序执行结果:
ww(“t.fun();”语句执行结果)
aa(“System.out.println(t);”语句执行结果)