目录
一 、基本概述
在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") ;
}
}
}
};
程序运行结果: