Object类

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类是参数的最高统一类型。但是Object类本身也具备有一些定义的的方法。

No方法名称类型描述
1public Object()构造无参构造是专门为子类提供服务的
2public String toString()普通取得对象信息
3public boolean equals​(Object obj)普通对象比较

对于整个Object类中方法都需要熟悉。

取得对象信息

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

class Person {
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}
public class TestDemo {
	public static void main(String[] args) {
		fun("Hello"); //String是Object子类  Hello
		fun(new Person("zhangsan", 10)); //Person@659e0bfd
	}
	public static void fun(Object obj) {//表示所有的类对象都是接收
		System.out.println(obj.toString()); //默认输出对象就是调用toString()
	}
} 

默认情况下Object类中提供的toString()方法只能够得到一个对象的地址(这是所有对象都共有具备的特征)。而如果默认的toString()功能不足,可以在需要的子类中重写toString()方法。
范例: 重写toString()方法

class Person {
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String toString() {//重写Object类中的方法
		return "姓名:" + this.name + ",年龄:" + this.age;
	}
}
public class TestDemo {
	public static void main(String[] args) {
		fun("Hello"); //String是Object子类  Hello
		fun(new Person("zhangsan", 10)); //姓名:zhangsan,年龄:10
	}
	public static void fun(Object obj) {//表示所有的类对象都是接收
		System.out.println(obj.toString()); //默认输出对象就是调用toString()
	}
} 

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

String是作为信息输出的重要的数据类型,在Java中所有的数据类型只要遇见了String,并且执行了“+”的连接操作,那么都要求将其变为字符串后连接,而所有的对象要变为字符串就默认使用toString()方法。

class Person {
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String toString() {//重写Object类中的方法
		return "姓名:" + this.name + ",年龄:" + this.age;
	}
}
public class TestDemo {
	public static void main(String[] args) {
		String result = "Hello" + new Person("zhangsan", 10);
		System.out.println(result); //Hello姓名:zhangsan,年龄:10
	}
} 

对象比较

String类内容的比较使用的是equals()方法,实际上这个equals()方法就是String类重写了Object类的方法。

String类中equals():public boolean equals​(Object anObject);

范例: 实现对象比较

class Person {
	private String name;
	private int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object anObject) {
		if(anObject == null) {
			return false;
		}
		if(this == anObject) {
			return true;
		}
		if(!(anObject instanceof Person)) {
			return false;
		}
		//必须将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("zhangsan", 10);
		Person per2 = new Person("zhangsan", 10);
		System.out.println(per1.equals(per2)); //true
		System.out.println(per1.equals("Hello")); //false
	}
} 

需要注意一个对象比较的形式:
public boolean equals(Person anObject){}
因为父类中equals()方法用的是Object,所以以上的方法严格来讲不叫重写了,叫重载。

Object接收引用数据类型

Object可以接收任意的对象,因为Object是所有类的父类,但是Object的概念不仅仅局限于此,它可以接收所有的引用数据类型,包括:数据、接口。
范例: 使用Object接收数组对象

public class TestDemo {
	public static void main(String[] args) {
		//利用Object接收数组对象,向上转型
		Object obj = new int[]{1, 2, 3};
		//向下转型,需要强制转型
		int[] data = (int[])obj;
		for(int x = 0; x < data.length; x++) {
			System.out.print(data[x] + "、"); //1、2、3、
		}
	}
} 

而Object可以接受接口更是Java中的强制性要求,因为接口本身是不可能继承任何类的,所以这种的类型的接收是自己的规定。
范例: 使用Object接收接口对象

interface IMessage {}
class MessageImpl implements IMessage {
	public String toString() { //Object类的方法
		return "blog.isohard.cn";
	}
}
public class TestDemo {
	public static void main(String[] args) {
		IMessage msg = new MessageImpl(); //子类向父接口转型
		Object obj = msg; //接口向Object转型
		System.out.println(msg.toString());//blog.isohard.cn
		IMessage tmp = (IMessage)obj;
	}
} 

Object真正达到了参数统一,如果一个类希望接收所有的数据类型,就是用Object完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值