Object类
1.基本作用
在java中所有的类都有一个公共的父类Object,一个类只要没有显示地继承一个类,则肯定是Object类的子类。
class person extends Object{}
class Person
两者等效,Object类中提供了很多的方法
Object类中的主要方法:
1. public Object() 构造 构造方法
2. public boolean equals(Object obj) 普通 对象比较
3. public int hashCode() 普通 取得hash码
4. public String toString() 普通 对象打印时调用
以上列出Object类中比较常用的几个方法
对于一个设计良好的类来说,最好覆写Object类中的equals、hashCode、toString三个方法
先看一段代码
package test1; class Demo { } public class ObjectDemo01 { public static void main(String[] args) { Demo d = new Demo(); System.out.println("不加toString()输出:" + d); System.out.println("加上toString()输出:" + d.toString()); } }
结果:
不加toString()输出:test1.Demo@c17164
加上toString()输出:test1.Demo@c17164
从程序的运行结果可以清楚的发现,加与不佳结果是一样的,也就是说对象输出时一定会调用Object类中的toString()方法打印内容
package test1; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "姓名:" + this.name + ":年龄:" + this.age; } } public class ObjectDemo02 { public static void main() { Person per = new Person("张三", 30); System.out.println("对象信息:" + per); } }
结果:对象信息:姓名:张三 年龄:30
package test1; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; // 通过构造方法为封装的属性赋值 } public boolean equals(Object obj) {// 覆写Object类中的equals()方法 if (this == obj) { // 如果两个对象的地址相等,则肯是同一个对象 return true; } if (!(obj instanceof Person)) { return false; } Person per = (Person) obj;// 将传进来的对象向下转型 if (per.name.equals(this.name) && per.age == this.age) {// 逐个属性比较,看是否相等 return true; } else { return false; } } public String toString() {// 覆写toSring方法 return "姓名:" + this.name + ":年龄:" + this.age; } } public class ObjectDemo03 { public static void main(String[] args) { Person per1 = new Person("张三", 30); Person per2 = new Person("张三", 30); System.out.println(per1.equals(per2) ? "是同一个人!" : "不是同一个人!"); System.out.println(per1.equals("hello") ? "是同一个人" : "不是同一个人"); } }
结果:
是同一个人!
不是同一个人