java Object类

1.java中,除了Object类之外,所有的类实际都存在继承关系,现在定义了一个类,没有默认继承任何父类,默认继承Object类,下面两种类最终定义效果一样.

class Person{}
class Person extends Object{}

Object类可以接受所有类的实例化对象.

2.使用Object类接受任意对象的引用.

class Person{  //默认为Object子类
}
public class TestDemo{
          public static void main(String args[]){
              Object obj =new Person();     // 向上转型
              Person per=(Person)obj;   //向下转型
              }
          }

运行程序不报错,可以证明Object类是所有类的父类,一个操作可能接受所有类的对象,使用Object作为参数最合适.

对于简单java类而言,应覆写Object类中的3个方法
1.取得对象信息:public String toString();
2.对象比较:public boolean equals(Object obj);
3.取得哈希码:public int hashCode();

3.取得对象信息: toString()
如果现在一个对象直接输出,那么默认情况下输出的是一个对象的地址.

class Person{
}
public class TestDemo{
   public static void main(String args[]){
       Person per=new Person(); 
       System.out.println(per);         //Person@1f6226
       System.out.println(per.toString());   //Person@1f6226
       }
   }

本程序可以发现,直接输出一个对象,与调用toString()方法后进行对象的输出,最终的结果是一样的,所以得出结论:对象直接输出默认调用了Object类中的toString方法.默认的toString方法有一个特点:为了适用于所有的子类,在toString默认情况下输出对象地址,每个子类可以根据自己需要进行覆写.

4.覆写Object类的toString()方法

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 TestDemo{
       public static void main(String args[]){
       Person per=new Person(“张三”,22);   //实例化对象
       System.out.println(per);    //直接输出对象
       }
       }

5.实现对象比较

package class2;

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 boolean equals(Object obj){//对象比较
        if (this==obj){     //判断地址是否相同
            return  true;
        }
        if (obj==null){                 //要比较的对象是否为null
            return false;
        }
        if (!(obj instanceof  Person)){   //不是本类
            return false;
        }
        //因为name和age属性是在Person类中定义,而Object类没有
        Person per= (Person) obj;   //向下转型
        if (this.name.equals(per.name) && this.age == per.age){
            return true;
        }
        return false;
        }

    }

public class TestDeo{
    public static void main(String args[]){
        Person per1=new Person("芷若",20);   //实例化对象
        Person per2=new Person("芷若",20);   //实例化对象

        System.out.println(per1.equals("Hello"));    //不是同类对象,为false
        System.out.println(per1.equals(per2));    //是同类对象且内容相同,为true
    }
}

运行结果
采用equals()方法名称完成了对象比较操作,只需要按照Object类覆写equals()方法即可实现对象比较.
在这里插入图片描述

6.使用Object接受所有的引用数据类型
Object是所有类的父类,所以Object类可以接收所有类对象,引用数据类型特殊性,实际上Object类可以接收所有引用数据类型数据,包括数组、接口、类.

7.使用Object类接收数组,数组和Object没有任何明确定义关系.

public class Test2{
   public static void main(String args[]){
       Object obj =new int[]{1,2,3};   //接受数组
       if(obj instanceof int[]){
             int []data =(int[]) obj;    //向下转型
             for(int x=0;x<data.length;x++){  //输出数组内容
             System.out.print(data[x]+"、")
                  }
              }
         }
    }

运行结果
使用Object接受一个数组对象,这说明Object可以接受数组类型.
1、2、3

8.接口定义讲,它是不能继承一个父类的,但是接口依然属于引用类型,所以即使没有继承类,也可以使用Object接受.

interface Message{   //定义接口
}
class Messagelmpl implements Message{        //定义接口子类
public String toString(){
     return "New Message:Hello world" }
 }

public class Test2{
   public static void main(String args[]){
         Message msg=new Messagelmpl();  //向上转型
         Object obj=msg;              //使用Object接受接口对象,向上转型
         Message temp=(Message) obj;  //向下转型
         System.out.println(temp);           //toString()
         }
       
   }

运行结果
有了Object类出现,所以操作的数据就可达到统一.
New Message:Hello World

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值