Java面向对象编程笔记(十)

1、Object类

在Java之中只有一个类是不存在有继承关系的,那么这个类就是Object,也就是说所有的类默认情况下都是Object子类。

class Person{}
class Person extends Object{}

上面两个类的定义是一样的。
在Object类设计的时候考虑到了所有继承的问题,所以该类提供有无参构造方法,这样所有的类在定义时即便不知道Object类的存在也不会出现构造方法调用失败的语法错误。
那么既然Object类是所有类的父类,那么这种情况下就可以使用Object类接收所有的子类对象。


class Person{}
public class Hello{
	public static void main(String args[]) {
		Object obj = new Person();
		if (obj instanceof Person) {
			Person per = (Person) obj;
			System.out.println("Person对象向下转型执行完毕。");
		}
	}
}

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

2、获取对象信息:toString()

Object类本身也是提供有一些处理方法的,在Object类之中提供可以获取一个对象的完整信息:public String toString()。


class Person{}
public class Hello{
	public static void main(String args[]) {
		Person per = new Person();
		System.out.println(per);
		System.out.println(per.toString());//Object类继承而来
		
	}
}

这个方法和直接输出的时候方法是一样的,所以对象信息的获得可以直接覆写此方法。

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 Hello{
	public static void main(String args[]) {
		Person per = new Person("张三",20);
		System.out.println(per);
	}
}

3、对象比较:equals()

对象的比较主要功能是比较两个对象的内容是否完全相同,如果现在有两个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 Hello{
	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("不是同一个对象");
		}
	}
}
  • 这样比较会将每一个属性都进行相等判断,所以会调用大量的getter()方法。
  • 对象比较是一个类内部所具备的功能,而不应该在外部定义;

Object类作为所有类的父类提供了对象比较操作的支持,对于对象比较的操作实现可以使用equals():

  • 对象比较:public boolean equals(Object obj),可以接收所有类型,默认情况下该方法只是进行了两个对象的地址判断;
public boolean equals(Object obj){
	return (this == obj);
}

想要实现此方法,需要在子类中覆写此方法。


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 Hello{
	public static void main(String args[]) {
		Person perA = new Person("张三",20);
		Person perB = new Person("张三",20);
		System.out.println(perA.equals("狗"));
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值