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