8.6Object

在java语言设计过程中,为了方便操作类型的统一,也为了方便为每一个类定义一些公共操作,所以专门设计了一个公共的Object父类(此类是唯一一个没有父类的类,但确是所有类的父类),所以利用class关键字定义的类全部都默认继承自Object类。
既然所有类全部都是Object类的子类,那么也就意味着所有类的对象都可以利用向上转型的特点为Object类对象实例化。
范例:对象向上转型为Object类型

public class Object182 {
       public static void main(String[] args) {
		 Object ob=new Person1();//向上转型
		 if(ob instanceof Person1) {
			 Person1 on=(Person1) ob;
			 on.sun();
			 
		 }
	}
}

本程序给出了Object接收子类实例化对象的操作形式,由于所有的对象都可以通过接收Object接收,这样设计的优势在于:当某些操作方法需要接收任意类型时,那么最合适的参数类型就是Object。
提示:Object可以接收所有引用数据类型
范例:利用Object接收数组

public class Object182b {
       public static void main(String[] args) {
		    Object obj=new int [] {1,2,3};//向上转型
		    if(obj instanceof int[]) {   //是否为整形数组
		    	int date []=(int [])obj;
		    	for(int temp:date) {
		    		System.out.print(temp+"、");
		    	}
		    }
	}
}

执行结果

1、2、3、

也可以接收接口

8.6.1获取对象信息

在Object类中提供有一个toString()方法,利用此方法可以实现对象信息的获取,而该方法是在直接进行对象输出时的默认被调用的
范例:获取对象信息

package com.lxh.eightchapter;

public class Object182c {
       private String name;
       private int age;
	public void SetName(String name) {
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age=age;
	}
    public int getAge() {
    	return age;
    }
    public Object182c() {}
    public Object182c(String name,int age) {
    	this.name=name;
    	this.age=age;
    }
	@Override
	public String toString() {
		return "Object182c [name=" + name + ", age=" + age + "]";
	}
    
}




public class Object182cJava {
        public static void main(String[] args) {
        	Object182c per=new Object182c("李双双",33);
        	System.out.println(per);    //直接输出对象调用toString方法
		}
}


执行结果

Object182c [name=李双双, age=33]

本程序在子类中根据自己的实际需求覆写了toString()方法,这样当对象进行打印时,就可以直接调用子类覆写过得toString方法获取相关对象信息。
提示:当一个对象被直接输出时,默认输出的是对象编码。toString()方法利用相应的反射机制和对象编码获取一个对象信息,所以当子类不在覆写toString()方法时 ,toString()方法会返回“类名称@7b1d7fff”类似的信息。

8.6.2对象比较

对象比较的主要功能:比较两个对象的内容是否完全相同。
假设有两个Person 对象,这两个对象由于分别使用了关键字new开辟堆内存空间,所以要确认这两个对象是否一致,就需要将每一个成员属性依次进行比较,对于这样的比较,在Object类中提供了一个标准的方法。

对象比较标准方法:public boolean equals(Object obj)

Object类中考虑到设计的公共性,所以equals()方法中两个对象的比较是基于地址数值判断(“对象==对象”地址数值判断)实现的,如果子类有对象比较的需求,那么只需覆写此方法即可实现。
提示:String类也是覆写了equals()方法。
String是Object子类,所以在String类中的方法equals()方法(方法定义:public boolean equals(Object obj))实际上就是覆写了Object类中的equals()方法。

范例:覆写equals()方法

package com.lxh.eightchapter;

public class Person2 {
       private String name;
       private int age;
       public void setName(String name) {
    	   this.name=name;
       }
       
       public String getName() {
    	   return name;
       }
       public void setAge(int age) {
    	   this.age=age;
       }
       public int getAge() {
    	   return age;
       }
       
	public Person2() {
	}
	public Person2(String name, int age) {
		this.name = name;
		this.age = age;
	}
	//equals()方法这个时候会有两个对象;当前对象this、传入的object
	public boolean equals(Object obj) {
		if(!(obj instanceof Person2)) {   //实例类型判断
			return false;
		}
		if(obj==null) {   //null判断
			return false;
		}
		if(this==obj) {     //地址相同,则认为是同一对象
			return true;	
		}
		//获取子类中的属性
		Person2 per=(Person2)obj;   //获取子类属性
		return this.name.equals(per.name)&&this.age==per.age;
	}
       
}


public class Person2java {
       public static void main(String[] args) {
    	   Person2 perA=new Person2("张三",20);
    	   Person2 perB=new Person2("张三",20);
    	   System.out.println(perA.equals(perB));   //对象比较
	}
}


执行结果

true

覆写equals()方法即可实现对象比较

发布了162 篇原创文章 · 获赞 9 · 访问量 3113

猜你喜欢

转载自blog.csdn.net/ll_j_21/article/details/104435277
8.6