Object类

目录

一 、基本概述 

二 、主要方法

1 、toString() 方法

2 、equals() 方法

三 、接收任意引用类型的对象

1 、使用 Object 接收接口实例

2 、使用 Object 接收数组


 

一 、基本概述 

在Java中所有的类都有一个公共的父类Object ,一个类没有写出继承任何类时,此类也是Object类的子类。如下面两行代码表示的含义是一样的:

class Person {}
class Person extends Object {}

Object 类中主要有 equals() 、hashCode() 、toString() 3个方法

 

 

二 、主要方法

1 、toString() 方法

class Demo{	// 定义Demo类,实际上就是继承了Object类

};

public class ObjectDemo01{
    public static void main(String args[]){
        Demo d = new Demo() ;	// 实例化Demo对象
        System.out.println("不加toString()输出:"+d) ;
        System.out.println("加上toString()输出:"+d.toString()) ;
    }
};

程序运行结果:

 以上程序输出了一样的地址信息,从程序的运行结果发现,加与不加 toString() 最终的输出结果都是一样的,也就是说对象输出时一样会调用 Object 类中的 toString() 方法,利用此特性便可以通过 toString() 取得一些对象信息

class Person{
    private String name ;	// 定义name属性
    private int age ;		// 定义age属性
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public String toString(){
        return "姓名:" + this.name + ";年龄:" + this.age ;
    }
};
public class ObjectDemo02{
    public static void main(String args[]){
        Person per = new Person("张三",20) ;	 // 实例化Person
        System.out.println("对象信息:" + per) ;
    }
};

程序运行结果:

以上程序中的Person类覆写了Object类的 toString() 方法,所以输出时调用的是被子类覆写过的 toString() 方法

 

2 、equals() 方法

equals() 方法默认是比较内存地址的,一下程序通过equals() 方法进行对象的比较

class Person{
    private String name ;	// 定义name属性
    private int age ;		// 定义age属性
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public boolean equals(Object obj){
        if(this==obj){		// 地址相等
            return true ;	// 肯定是同一个对象
        }
        if(!(obj instanceof Person)){	// 不是Person对象
            return false ;
        }
        Person per = (Person) obj ;	// 向下转型
        if(per.name.equals(this.name)&&per.age == this.age){
            return true ;	// 依次比较内容
        }else{
            return false ;
        }
    }
    public String toString(){
        return "姓名:" + this.name + ";年龄:" + this.age ;
    }
};
public class ObjectDemo03{
    public static void main(String args[]){
        Person per1 = new Person("李四",30) ;	 // 实例化Person
        Person per2 = new Person("李四",30) ;	 // 实例化Person
        System.out.println(per1.equals(per2)?"是同一个人!" : "不是同一个人!") ;
        System.out.println(per1.equals("hello")?"是同一个人!" : "不是同一个人!") ; //一个字符串就是String类的匿名对象,故可以传递进去比较
    }
};

程序运行结果:

因为知识的层次性关系,hashCode() 方法放在后面Java类集应用篇章中

 

 

三 、接收任意引用类型的对象

Object类是所有对象的父类,则所有的对象都可以向 Object 进行转换,这其中也包括接口和数组类型,即一切的引用数据类型都可以使用 Object 进行接收

 1 、使用 Object 接收接口实例

interface A{
    public String getInfo();
}
class B implements A{
    public String getInfo(){	// 覆写方法
        return "Hello World!!!" ;
    }
};
public class ObjectDemo04{
    public static void main(String args[]){
        A a = new B() ;	// 向上转型,为接口实例化
        Object obj = a ;	// 使用Object接收,向上转型
        B b = (B)obj ;	// 向下转型
        System.out.println(b.getInfo()) ;
    }
};

程序运行结果:

虽然接口不能继承一个类,但依然是 Object 类的子类,因为接口本身是引用数据类型

 

2 、使用 Object 接收数组

public class ObjectDemo05{
    public static void main(String args[]){
        int temp[] = {1,3,5,7,9} ;	// 定义数组
        Object obj = temp ;	// 使用Object接收数组
        print(obj) ;
    }
    public static void print(Object o){
        if(o instanceof int[]){		// 判断是否是整型数组
            int x[] = (int[])o ;    //向下转型
            for(int i=0;i<x.length;i++){ //循环输出
                System.out.print(x[i] + "\t") ;
            }
        }
    }
};

程序运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值