第 20 节 Object类


1、Object类的作用;

2、Object类的常用方法;

3、Object类接收引用数据类型;

4、利用Object类修改链表。

Object类的基本定义

Object类是所有类的父类,也就是说任何一个类在定义的手如果没有明确的继承一个父类的话,那么它就是Object类的子类,也就是说以下两种类定义的效果是完全相同的;

class Book {}
class Book extends Object {}

在整个Java里面类的继承关系一直存在(除了Object类)。

既然Object类是所有类的父类,那么就有了一个最大的好处:利用Object类可以接受全部类的对象,因为所有类都可以向上转型成Object类。

范例: 利用Object类接收对象

class Book extends Object {}
public class MainClass {
	public static void main(String[] args) {
		Object obja = new Book(); // 向上转型
		Object objb = "hello"; // 向上转型
		Book b = (Book) obja;
		String s = (String) objb;
	}
}

既然这样,在不确定参数类型的时候,使用Object类应该是最好的选择。

**问题:**为什么要在Object类里面定义一个无参构造方法?

Object类是所有类的父类,所有子类进行实例化时都一定要调用父类的构造方法。

从严格意义上来讲(一般不遵守),任何一个简单Java类都应该覆写Object类中的如下三个方法:

  • 取得对象信息:public String toString();

  • 对象比较:public boolean equals(Object obj);

  • 取得对象Hash码:public int hashCode()。

取得对象信息:toString()

如果说现在是一个String类对象,直接输出这个对象可以取得字符串的内容,但是如果是一个自定义的对象,那么就会出现一个对象编码。

范例: 观察代码

发现现在如果直接输出对象与调用toString()方法后输出对象的功能是完全一样的。

在进行对象输出的时候,输出操作会自动调用对象中的toString()方法将对象变为字符串后再输出,而默认情况下Object类中的toString()为了适应于所有对象的输出,所以只输出了对象的编码。

如果现在有需要,也可以自己根据实际情况来覆写此方法。

范例: 覆写toString()方法

直接输出对象就调用了toString(),等于节约了输出对象时的代码。

对象比较:equals()

对象比较在很多开发之中都是一定要使用到的核心概念,而在之前使用了一个自定义的compare()方法作为比较方法的名称,但是这个不标准,标准的做法是使用equals()方法完成。

范例: 实现对象比较

Object类可以接受一切引用数据类型

Object类是所有类的父类,所以Object类的对象可以接受所有类的对象,可是除了类的对象之外,Object还可以接受数组和接口对象。

范例: 接受数组数据

除了数组外,接口也同样可以。

范例: Object类接收接口对象

整个程序的参数都可以使用Object进行统一。

修改链表

长期一直困扰我们的是事情就是链表问题,因为在设计链表的时候一直遗留下的问题:链表不能统一数据,所以就造成了每一次使用链表的时候都要进行重复的开发,但是有了Object之后,这一切就彻底解决了,因为Object可以接受任何类型的对象,同时在链表之中需要对象比较的动能,这一功能Object也提供有容器equals()方法。

范例: 修改可用链表

范例: 测试

总结

1、Object类对象可以接受一切的数据类型(引用数据类型),包括数组和接口,解决了数据统一问题;

2、toString()在对象输出时调用,equals()在对象比较时调用。

综合实战:宠物商店

整合链表应用,同时进一步巩固接口的作用(标准)。

**思考:**要求以程序结构为主

实现一个宠物商店的模型,一个宠物商店可以保存多个宠物的信息(名字、年龄),可以实现宠物的上架、下架、模糊查询的功能。

现在已经有了一个可用链表,并且这两个链表里面还提供有Object统一参数。

范例: 定义宠物的标准

宠物商店与具体的宠物没有任何的关系,它只和宠物这个接口的标准有关。

范例: 定义宠物商店

下面就可以根据宠物的标准定义各个子类。

范例: 定义猫

范例: 定义狗

可以发现,有了接口以后子类的形式都非常的类似,这属于接口的特点。

范例: 测试类

此时实现了现实的关系的模拟。

最后更新于

这有帮助吗?