Object

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完成!

原文地址:https://www.cnblogs.com/Tony98/p/10414425.html