Java基础(二十二)

Object类

1:什么是Object类

Object类的主要特点是可以解决参数的统一问题,也就是说使用Object类可以接收所有的数据类型。

在Java之中只有一个类是不存在有继承关系的,那么这个类就是Object类,也就是说所有的默认情况下都是Object子类(以下两种定义方式相同):

class Person { } 等价于 : class Person extends Object { }

在Object类设计的时候考虑到了所有继承的问题,所以该类提供有无参构造方法,这样所有的类在定义时即便不知道Object的存在也不会出现构造方法调用失败的语法错误。

2:Object是所有类的父类

既然Object是所有类的父类,那么这种情况下就可以使用Object类接收所有的子类对象。(代码如下)

//观察Object类接收所有子类对象
public class JavaDemo {
	public static void main(String args[]) {
		Object obj = new Person() ;	// 向上转型
		if (obj instanceof Person) {
			Person per = (Person) obj ;
			System.out.println("Person对象向下转型执行完毕。") ;
		}
	}
}

如果一个程序的方法要求可以接收所有类对象的时候就可以利用Object实现处理;

在Java设计的过程之中对于所有的引用数据类型实际上都可以使用Object类进行接收,包括数组也可以(代码如下)。

public class JavaDemo {
	public static void main(String args[]) {
		Object obj = new int [] {1,2,3} ;	// 向上转型
		if (obj instanceof int[]) { // 是否为整型数组
			int data [] = (int []) obj ;  // 向下转型
			for (int temp : data) {
				System.out.print(temp + "、") ;
			}
		}
	}
} 
//Object是一个万能的数据类型,它更加适合于程序的标准设计。

3:获取对象设计

Object虽然是一个类,但是这个类本身也提供有一些方法,例如:toString();该方法可以获取一个对象的所有信息,public String toString().

//观察默认的构造方法
package 开始面试;
class Person { }
public class Demo{
	public static void main(String args[]){
		Person per = new Person();
		System.out.println(per);
		System.out.println(per.toString());//Object类继承而来的方法。
	}
}
//结果:
开始面试.Person@3c679bde
开始面试.Person@3c679bde

通过上述的代码:发现之前进行对象直接输出的时候多调用的方法就是toString()方法,所以这个方法调用和不调用的效果是一样的。

所以以后的开发之中对象信息的获取可以直接覆写此方法。

class Person {
	private String name ;
	private int age ;
	public Person(String name,int age) {
		this.name = name ;
		this.age = age ;
	}
	@Override
	public String toString() {
		return "姓名:" + this.name + "、年龄:" + this.age ;
	}
}
public class Test {
	public static void main(String args[]) {
		Person per = new Person("张三",20) ;
		System.out.println(per) ;
	}
} 
//姓名:张三、年龄:20

在以后编写Java类的过程中只需要覆写toString()方法即可;

4:对象比较:equals()

Object类之中另外一个比较重要的方法就是在于对象比较的处理上,所谓的对象比较功能是比较两个对象的内容是否完全相同:假设说现在有两个Person对象,要想确认这两个对象是否一致,但是两个对象本身会有两个不同的内存地址数值,所以此时应该是通过内容的比较完成的。

//对象比较的基础实现
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 String getName() {
		return this.name ;
	}
	public int getAge() {
		return this.age ;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		Person perA = new Person("张三",20) ;
		Person perB = new Person("张三",20) ;
		if (perA.getName().equals(perB.getName()) &&
			perA.getAge() == perB.getAge()) {
			System.out.println("是同一个对象。") ;
		} else {
			System.out.println("不是同一个对象。") ;
		}
	}
} 
//此时的确实现了对象比较的功能,但是这个功能比较麻烦:
1:由于需要进行对象比较的时候要讲每一个属性都进行判断,所以在外部要调用大量的getter()方法;
2:对象比较应该是一个类内部所具备的功能,而不应该在外部定义;
3:对象比较:public boolean equals(Object obj),可以接收所有类型,默认情况下该方法只是进行了两个对象的地址判断
public boolean equals(Object obj){
	return(this==obj);
}

对于实际的使用者而言,如何要想正确实现判断处理,那么就必须在子类中的覆写方法,并且进行属性判断。

//观察覆写equals()方法
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 ;
	}
	// equals()方法这个时候会有两个对象:当前对象this、传入的Object
	public boolean equals(Object obj) {
		if (!(obj instanceof Person)) {
			return false ;
		}
		if (obj == null) {	// 不关心null的比较
			return false ;
		}
		if (this == obj) {	// 同一个地址
			return true ;
		}
		Person per = (Person) obj ; // 目的是为了获取类中的属性
		return this.name.equals(per.name) &&  this.age == per.age ;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		Person perA = new Person("张三",20) ;
		Person perB = new Person("张三",20) ;
		System.out.println(perA.equals(perB)) ;
	}
} 

String类是Object类的子类,那么这个类里边实际上已经覆写了equals()方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值