Object
Object类是java默认提供的一个类,java里面除了Object类之外。所有类都存在继承关系,继承Object父类
Object取得对象信息
在使用对象直接输出的时候默认情况下输出的是一个地址编码。如果说现在使用的是一个String类,该类对象直接输出的时候就是内容。主要原因就是toString()方法问题
范例:观察String类对象的输出
1 class Person{
2 private String name;
3 private int age;
4 public Person(String name,int age){
5 this.name=name;
6 this.age=age;
7 }
8 }
9 public class Newbegin{
10 public static void main(String args []) {
11 fun("hello");//String 类是Object的子类。
12 fun(new Person("张三",20));//自定义对象。
13 }
14 public static void fun(Object obj){
15 System.out.println(obj.toString());//默认对象调用的是toString方法
16 }
17 }
现在就发现了,我们默认情况下Object类中提供的toString()方法只能得到一个对象的地址(而这是所有对象的特征),
感觉toSting的方法功能不足,我们就可以进行覆写
范例:覆写toString方法
1 class Person{
2 private String name;
3 private int age;
4 public Person(String name,int age){
5 this.name=name;
6 this.age=age;
7 }
8 public String toString(){//覆写Object方法
9 return "姓名:"+this.name+",年龄:"+this.age;
10 }
11 }
12 public class Newbegin{
13 public static void main(String args []) {
14 fun("hello");//String 类是Object的子类。
15 fun(new Person("张三",20));//自定义对象。
16 }
17 public static void fun(Object obj){
18 System.out.println(obj.toString());//默认对象调用的是toString方法
19 }
20 }
所以toString 的核心是取得对象信息!!!
提醒:String作为信息输出的重要类型。在java中我们所有数据类型只要遇见了String,并且执行了+这样的连接操作。那么都要求将其变为字符串后连接,而所有对象想要变为字符串就默认使用toString方法,
结论:字符串是王道!
Object的对象比较
String类内容的比较使用的是equals()方法,实际上这个equals()方法就是String类覆写的Object方法
String类的中的equals
以后再编写对象比较处理,不要在使用之前的compare()了,更换为equals()。
范例:实现对象比较
1 class Person{
2 private String name;
3 private int age;
4 public Person(String name,int age){
5 this.name=name;
6 this.age=age;
7 }
8 public boolean equals(Object anObject){
9 if(anObject==null){
10 return false;
11 }
12 if(this==anObject){
13 return true;
14 }
15 if(!(anObject instanceof Person)){
16 return false;
17 }
18 //必须将Object类转型为Person类型后才可以调用name和age属性
19 Person per=(Person)anObject;
20 return this.name.equals(per.name) && this.age==per.age;
21 }
22 public String toString(){//覆写Object方法
23 return "姓名:"+this.name+",年龄:"+this.age;
24 }
25 }
26 public class Newbegin{
27 public static void main(String args []) {
28 Person per1=new Person("张三",20);
29 Person per2=new Person("张三",20);
30 System.out.println(per1.equals(per2));
31 }
32 }
结论:但是很多人再写对象比较的时候会使用如下的形式:
public boolean equals(Person anObject)
将equals方法中的Object换成Person 这不是方法的覆写了而是方法的负载!!!
Object接受引用数据类型
在之前分析了。Object可以接受任意对象,从定义结构上来说。Object是所有类的父类。但是Object的一个概念不仅仅局限于此。它可以接受所有的引用数据类型,包括:数组。接口。
范例:使用Object来接受数组对象
1 public class Newbegin{
2 public static void main(String args []) {
3 //利用Object接受数组对象,向上转型
4 Object obj=new int[]{1,2,3};
5 //向下转型,需要强制类型
6 int data[]=(int[])obj;
7 for(int x=0;x<data.length;x++){
8 System.out.println(data[x]+",");
9 }
10 }
11 }
而Object可以接受接口更是java中的强制性要求,因为接口本身是不可能继承任何类的,所以类型的接受就是自己的规定,
范例:Object接受接口对象
1 interface IMessage{
2
3 }
4 class hearMessage implements IMessage{
5 public String toString(){
6 return "www.jy.com";
7 }
8 }
9 public class Newbegin{
10 public static void main(String args []) {
11 IMessage mes=new hearMessage();
12 Object obj=mes;
13 System.out.println(obj.toString());
14 IMessage im=(IMessage)obj;
15 }
16 }
Object真正到达了参数的统一,如果一个类希望可以接受所有的数据类型,就用Object完成!