Object 类

#Object 类 (最高参数统一化)

Object类是JDK默认提供的一个类。java中除了Object类,所有类都存在继承关系,默认会继承Object父类;

当一个类的参数用object 接收,可以接收任何参数;

所有类的对象都可以使用Object 进行接收。Object类是参数的最高统一类型。

1.方法

1.1构造方法

public Object()//无参构造
    //空实现 为子类服务,让子类可以创建对象

1.2 取得对象的信息(toString的核心目的)

public String toString();
//Object类中toString()只是简单输出当前所引用的类名称以及对象地址。如果想在类中取得本类属性信息,需要覆写toString();
package Test;

class Person{
    private String name;
    private int age;

    Person(String name, int age) {//构造方法
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
public class Test7 {
    public static void main(String[] args) {
        fun(new Person("Amanda",21));
        fun("Hello");//由于String类覆写了Object类的toString 方法 
    }
    public static void fun(Object object){
        System.out.println(object.toString());
    }
}

在这里插入图片描述

​ 由打印结果知,由于String类覆写了Object的toString()方法 ,所以打印的是字符串的值,而Person类没有覆写Object类的toString()方法 打印的是类名和 对象地址(类名@地址哈希码 ),如需在类中取得取得本类信息,需要覆写toString();

系统输出 System.out.println(); 默认调用对象的toString() 方法 ,如果对象所在类没有覆写toString方法 则调用Object类中的toString方法。

当在Person中覆写toString()方法

//在上述Person类中覆写toString()
public String toString(){
        return "name:"+this.name+" age:"+this.age;
    }

在这里插入图片描述

String作为信息输出的重要数据类型,在java中所有的数据类型只要遇见了String并且执行了 + ,那么都要求将其变成字符串后连接,而所有对象要想变为字符串就默认使用toString()方法。

1.3 对象比较

“ == ”对于基本数据类型来说比较的是两个操作数的值,对于引用数据类型而言比较的是两者指向的堆内存地址是否相同。

//Object类内部的  equalsa方法
public boolean equals(Object obj){
    return (this==obj);//判断当前对象地址与传入对象地址是否一致
}
package Test;
//覆写equals  实现可以比较一个类的属性值是否相等
class Person{
    private String name;
    private int age;
    
    Person(String name, int age) {//构造方法
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
     public boolean equals(Object obj){
         //1.判断传入的对象是否为null
         if(obj==null){
             return false;
         }
        //2.判断obj是否是Person类对象
        //因为接收的参数为Object类型,Object可以指向任意类,可能不是Person类
       if(!(obj instanceof Person)){//判断obj是不是Person类的对象
           return false;
       }
       //3.判断当前对象是否和传入的对象地址相同:指向同一地址(为同一对象)不需要比较值
        if(this == obj){//==比较两个引用类型的地址
            return true;
        }
        //4.obj是Person对象,比较属性内容
        //向下转型取得Person属性值
        Person per  =(Person) obj;
        return this.name.equals(per.name)&&(this.age==per.age);
    }
}
public class Test7 {
    public static void main(String[] args) {
        Person per1 = new Person("Aamanda",19);
        Person per2 = new Person("dabe",23);
        System.out.println(per1.equals(per2));//equals已被覆写,可以比较属性值 
    }  
}

instanceof ():java中的保留关键字 它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据 。

2.接收引用数据类型

Object类可以接收任意类对象,因为Object类是所有类的父类;除此之外,Object类可以接收任意引用数据类型(包括引用数据类型) 包括 类、数组、接口

2.1 Object类接收数组

package Test;
public class Test10 {
    public static void main(String[] args) {
        //Message message = new messageImpl();//子类对象向父接口转型
        Object object = new int[]{1, 3, 5, 7, 9};//Object类接收一个数组
        int[] data = (int[]) object;//强制转换为 int[]
        System.out.println(data.length);
    }
}

2.2 Object类接收接口对象

package Test;

interface Message{//接口
    void getMessage();//抽象方法
}

class messageImpl implements Message{//子类实现接口
    public String toString(){
        return "helloworld!";
    }
    public void getMessage(){
        System.out.println("helloworld!");
    }
}

public class Test10 {
    public static void main(String[] args) {
        Message message = new messageImpl();//子类对象向父接口转型
        Object obj =message;//Object类接收 接口对象
        System.out.println(obj);        
        Message temp =(Message) obj;//强制类型转换
        temp.getMessage();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值