Object类/取得对象信息

本文详细介绍了Java中Object类的基本概念及其方法的应用,包括toString()方法的重写及equals()方法的正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object是Java默认提供的一个类,可以这么说,java里面除了Object类之外,所有的类都是存在有继承关系的。那么默认继承Object父类,也就是说以下的两种类的定义最终效果是完全相同的

class Message {

}

class Message extends Object{


}

那么也就证明:所有类的对象都可以使用Object进行接收

class Message{}
class Person{}
public class TestDemo {

	public static void main(String[] args) {
	fun(new Message());
	fun(new Person());
	}
	public static void fun(Object obj) {
		System.out.println(obj);
	}

}Object类的基本概念.Message@10dea4e
 Object类的基本概念.Person@647e05

所以在开发之中Object类是参数的最高统一类型。

但是Object本身也具备有一些定义的方法:

No

方法名称

类型

描述

1

public Object()

构造

无参构造是专门为子类提供服务的

2

public String toString()

普通方法

取得对象信息

3

public Boolean equals(Object obj)

普通

对象比较


对于整个Object类中的方法需要时间一点点来消化。


必须掌握Object类中的每个方法

···········································

取得对象信息

在使用对象直接输出的时候发现默认情况下输出的是一个地址编码。但是如果现在使用的是一个String类,该类对象直接输出的时候就是内容,主要的原因就是toString()方法的问题 

范例:观察String类对象的输出

class Person{
	private String name;
	private int age;
	public Person(String name,int age) {
		this.age=age;
		this.name=name;
	}
}
public class TestDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
fun("hellow");//String是Object的子类
fun(new Person("张三",20));
		
	}
	public static void fun(Object obj)
	{
		System.out.println(obj);
	}
}//结果 hellow
        Person@10dea4e  

/*当输出语句改为*/ System.out.println(obj.toString());

结果一样 。所以默认输出对象调用的就是toString()方法

现在就发现了,默认情况下Object类中提供的toString()方法只能够得到一个对象的地址(而这是所有对象都共同具备的特征)。

而现在如果觉得默认给出的toString()功能不足,就建议在需要的子类上覆写toString()方法。

范例:取得对象信息

class Person{
	private String name;
	private int age;
	public Person(String name,int age) {
		this.age=age;
		this.name=name;
	}//增加如下两行进行覆写
public String toString() {//覆写Object类中的方法
	return "姓名:"+this.name+" 、 年龄"+this.age;
	
}
}

public class TestDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
fun("hellow");//String是Object的子类
fun(new Person("张三",20));
		
	}
	public static void fun(Object obj)
	{
		System.out.println(obj.toString());
	}
}
结果为:hellow

姓名:张三 、 年龄20 

所以toString()核心目的在于取得对象信息相当于替换了之前简单java类之中的getInfo()方法的功能。

提醒:String是作为信息输出的重要的数据类型,

在Java中所有的数据类型只要遇见String,并且执行了“+”这种连接操作,

那么都要求将其变为字符串之后连接,而且所有对象要想变为字符串就默认使用toString()方法。

class Person{
	private String name;
	private int age;
	public Person(String name,int age) {
		this.age=age;
		this.name=name;
	}
public String toString() {//覆写Object类中的方法
	return "姓名:"+this.name+" 、 年龄"+this.age;
	}}

public class TestDemo {

	public static void main(String[] args) {
		String result ="Hello"+ new Person("张三",20);//见到String都向String转型不管是什么 。全部
		System.out.println(result);
	}

}
结论:字符串是王道。


                                 对象比较

String类内容的比较使用的是equals()方法,

实际上这个equals()方法就是String类覆写Object类的方法。

·String类中的equals():public boolean equals(Object obj);

 以后再编写对象比较的处理,不要再使用之前的compare()了,统一更换为equals().

范例:实现对象比较

class Person{
	private String name;
	private int age;
	public Person(String name,int age) {
		this.age=age;
		this.name=name;
	}
	
	public boolean equals(Object anObject) {
		/*Object是Person的父类 并不知道子类的属性所以需要把Object进行向下转型。
		 * */
		if(anObject==null) {
			return false;
			}
		if(this==anObject) {
			return true;
		}
		if(!(anObject instanceof Person)) {
			return false;//判断传参是否和Person类对象是同一类型
		}
		//必须将Object类型变为Person类型后才能调用name和age属性
		Person per=(Person) anObject;
		
		return this.name.equals(per.name)&&this.age==per.age;
	}
public String toString() {//覆写Object类中的方法
	return "姓名:"+this.name+" 、 年龄"+this.age;
	
}

}

public class TestDemo {

	public static void main(String[] args) {
Person per1=new Person("张三",20);
Person per2=new Person("张三",20);
	System.out.println(per1.equals(per2));
	}
}//结果为true

当没有if(!(anObject instanceof Peron))   并且equals方法传入一个字符串时,

就会出现ClassCastException异常


但是需要有一个注意,很多人再写对象比较的时候会使用如下的实行:

· public boolean equals(Person anObject)

因为父类中的equals()方法用的是Object,所以以上的方法严格来讲已经不叫覆写了,叫重载




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值