zoukankan      html  css  js  c++  java
  • 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完成!

  • 相关阅读:
    bzoj3211 花神游历各国
    bzoj1010
    day8
    day6&7
    bzoj1087
    noi同步赛day1
    bzoj1076
    day3&4&5
    bzoj1079 dp
    cholesky分解
  • 原文地址:https://www.cnblogs.com/Tony98/p/10414425.html
Copyright © 2011-2022 走看看