Object类

Object类在JDK1.0便存在,类层次结构的根类,每个类都使用 Object 作为超类

因为可作为所有类的父类,在设计时考虑所有子类继承的问题——默认调用父类无参构造函数,所以该类提供无参构造方法,所有的没有显式继承父类的类会默认继承Object类 调用Object的无参构造方法,所以不会出现构造方法调用失败的语法错误

class Person{ public Person{系统默认super.Object();}}//相当于class Person extends Object{}

既然Object类是所有类的父类,那么可以用它接受所有类实例 包括数组

class Person{}
public class JavaDemo{
	public static void main(String args[]){
		Object obj=new Person();//Object类对象向上转型
		if(obj instanceof Person){
			Person per=(Person)obj;//Person类对象向下转型
		}
	}
}
public class JavaDemo{
	public static void main(String args[]){
		Object obj=new int[]{1,2,3};//Object类对象向上转型
		if(obj instanceof Person){
			int[] data=(int [])obj;//Person类对象向下转型
			for(int temp:data){
			System.out.print(temp+",")}
		}
	}
}

Object类特点:解决参数统一问题,也就是说Object类可以接受所有数据特征

Object类提供了一些处理方法
获取对象完整信息toString()

class Person{}
public class JavaDemo{
	public static void main(){
		Person per=new Person();
		System.out.println(per);//输出一个地址
		System.out.println(per.toString());//继承Object的方法,输出同一个地址 
	}
}

即输出对象时默认调用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 JavaDemo{
	public static void main(String[] args){
		Person per=new Person("张三"20);
		System.out.println(per);//输出姓名张三年龄20
		System.out.println(per.toString());//输出姓名张三年龄20
	}
}

对象比较: 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;
	}
	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()){
		}else{
		}
	}
}

上面需要对每一个属性进行判断需要在外部调用大量get方法,对象比较应该是一个类内部具有的功能,而不应该在外部定义

Object类为所有类的父类提供了对象比较操作的支持,equals()
对象比较:
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()方法覆写
	public boolean equals(Object obj){//2个对象,1个是Person类对象调用本方法的this对象,1个是调用时传入的Object对象 再向下转型获取子类对象特有属性
		if(!(obj instanceof Person)){
			return false;//只能比较同类型
		}
		if(obj==null){
			return false;//b不关心null的比较
		}
		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));
		System.out.println(perA.equals("狗"));//String类 但无法转型成Person

	}
}

String类是Object类子类,同样也

覆写了equals()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值