首页 理论教育 始祖类Object-Java语言程序设计

始祖类Object-Java语言程序设计

时间:2023-10-18 理论教育 版权反馈
【摘要】:Object类之所以被称为“始祖类”,是因为Object类是所有类的父类,Java中的所有类都是由Object类派生出来的。因此,在Object 类中定义的方法,在其他类中都可以使用。表5-1 Object类中常用的方法 Object类中的常用方法示例。从上述结果看出,Person 类继承了Object 类,也就继承了Object 类中的equals、hash Code、toString等方法。在Java API中的一些类,如String类、Date类等都根据自身特点,重写了Object类中的equals、hasCode、toString 等方法。

始祖类Object-Java语言程序设计

Object类之所以被称为“始祖类”,是因为Object类是所有类的父类,Java中的所有类都是由Object类派生出来的。因此,在Object 类中定义的方法,在其他类中都可以使用。Object类中常见的方法如表5-1所示。

表5-1 Object类中常用的方法

【例5-1】 Object类中的常用方法示例。

创建Person类,代码如下:

第2行代码没有显示地指出Person类的父类,则Person类的直接父类就是Object,第2行代码等价与“class Person extends Object{”。

创建测试类Object Test,代码如下:

上述代码的运行结果如下:

Object Test类中第4行和第5行代码分别创建了两个Person类的引用变量p1和p2,并且指向了不同的Person类对象。

第6、7行代码输出引用变量p1、p2所指向对象的散列码值,该值的不同说明p1和p2所指向的对象不同。

第8、9行代码输出p1和p2所指向对象的一个字符串:全类名@哈希码,该值的不同同样说明p1和p2所指向的对象不同。

第10行代码,当使用equals比较两个引用变量时,当两个引用变量指向同一个对象时,则返回true,否则返回false,由第6、7行或者第8、9行代码的分析,得出第10行代码的结果为false。

第11行代码,“==”除了可以比较两个基本数据类型变量的值是否相等之外,还可以比较两个引用变量是否指向同一个对象,此时,“==”和equals完全等价,故第11行代码的输出结果和第10行代码的输出结果完全相同,也是false。

从上述结果看出,Person 类继承了Object 类,也就继承了Object 类中的equals、hash Code、toString等方法。在Java API中的一些类,如String类、Date类等都根据自身特点,重写了Object类中的equals、hasCode、toString 等方法。当然,Person 类也可以重写equals、hasCode、toString这些方法,代码如下:(www.xing528.com)

第9~16行代码重写了Object类中的equals方法,第10~15行代码为一条if..else语句,第10行代码中的“instanceof”运算符,用于判断obj的实参对象是否是Person1类或其子类的对象,如果obj的实参对象是Person1类或其子类的对象,则“obj instance of Person1”返回true,否则,返回false。第10行代码中的条件“! (obj instanceof Person1)”的含义是:当obj的实参对象不是Person1类的对象时,Person1对象和“非Person1”对象是不相等的,返回false。

第13行代码,当obj的实参对象是Person1类或其子类对象时,就可以将obj强制转换成Person1类对象。

第14行代码有两个条件,第一个条件是:p.name.equals(this.name),比较的是this和p两个引用变量的成员变量name是否相等,因为name是String 类型的变量,所以需要用equlas方法来比较,而且此处的equals 方法是String 类重写后的方法。第二个条件是:p.age==this.age,用“==”比较两个基本数据类型变量的值是否相等。

由此可以看出,第9~16行代码重写了equals方法后,两个引用变量相等的条件不再是指向同一个对象了,而是指向对象的name和age成员变量相等。

第19~21行代码重写了hashCode方法,该方法返回的不再是内存地址转变的整数,而是name成员变量的哈希值与11倍年龄的和。

第23~25行代码重写了toString方法,返回的不再是“全类名@哈希码”。

重新编写测试类文件Object Test1.java,代码如下:

上述代码的运行结果如下:

第4、5行代码创建了name和age成员变量完全相同的Person1类的两个对象,并分别赋值给两个Person1类的引用变量p1,p2。

第6、7行代码通过引用变量调用重写后的hashCode方法,由于第4、5行代码创建的两个对象的成员变量name和age完全相同,故hashCode方法的返回值相等。

第8、9行代码通过引用变量调用重写后的toString方法。

第10行代码通过引用变量调用的是重写后的equals方法,根据判断条件,第10行代码输出true。

第11行代码,“==”比较的仍然是两个引用变量是否指向同一个对象,故第11行代码输出false。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈