Java学习(二)Object

这个类很有意思,是所有类的爹,这个类中定义的东西是所有类中具备的。
给大家上代码,来理解这个。

package duotai;
class d{
	
}
public class object_d {
	
	public static void main(String[] args) {
    d d1=new d();
    d d2=new d();
    System.out.print(d1.equals(d2));
	}
}
输出:false//d1和d2因为内存不一样所以是false。
大家可以看到,d类中什么也没有,但是可以用equals方法,那么这个方法哪来的呢,就是继承的他的父亲,Object这个类的。

如果类的对象不一样的话,可以用equals比较吗?

package duotai;
class d{
	
}
class c{
	
}
public class object_d {
	
	public static void main(String[] args) {
    d d1=new d();
    c c1=new c();
    System.out.print(d1.equals(c1));
	}
}
输出:false
因为equals是c和d类的爹Object的方法所以,Object可以随便比较儿子啊。

如果自定义类中有和父类相同的功能咱们没必要自己定义,继承父类的功能即可,建立自己特有的内容就好,这就是覆盖。
气死我了,上代码(Object类中自带equals方法):

package duotai;
class d{
	private int num;
	d(int num){
		this.num=num;
	}
	public boolean equals(Object obj) {
		d d1=(d)obj;//如果没有下转,就会报错,Object里并没有定义num变量。
		return this.num==d1.num;
	}
}
public class object {
	public static void main(String[] args) {
   d d2=new d(2);
   d d3=new d(2);
   System.out.print(d2.equals(d3));
	}
}
输出是:true

那么都是继承的父类equals可以跨类比较吗?

package duotai;
class d{
	private int num;
	d(int num){
		this.num=num;
	}
	public boolean equals(Object obj) {
		d d1=(d)obj;//如果没有下转,就会报错,Object里并没有定义num变量。
		return this.num==d1.num;
	}
}
class e{
	private int num;
	e(int num){
		this.num=num;
	}
}
public class object {
	
	public static void main(String[] args) {
   d d2=new d(2);
   e e2=new e(2);
   System.out.print(d2.equals(e2));
	}
}
这样是不行的,因为equals重写的里面,咱们是把Object转成了d类,那么问题来了,e类能转成d类吗?答案是不行,因为儿子凭什么转儿子,大家都一样都是儿子。

一天一个学废小技巧:
咱们看看Object的一些函数
首先咱们直接试试类的实体用toString()函数和hashCode()的效果

package duotai;
class d{
	private int num;
	d(int num){
		this.num=num;
	}
}
class e{
	private int num;
	e(int num){
		this.num=num;
	}
}
public class object_b {
	
	public static void main(String[] args) {
   d d2=new d(2);
   System.out.println(Integer.toHexString(d2.hashCode()));
   System.out.print(d2.toString());
	}
}
输出是:52cc8049
duotai.d@52cc8049这
是类的哈希值,这是内存的经典数据结构啦。

是不是所有的对象都具备哈希值?答案是肯定的
咱们再继续看getClass功能

package duotai;
class d{
	private int num;
	d(int num){
		this.num=num;
	}
	public void a() {
		System.out.print("lala");
	}
}

public class object {
	public static void main(String[] args) {
   d d2=new d(2);
   Class c=d2.getClass();//类文件对象
   System.out.println(c.getName());
	}
}
得到的是:duotai.d,d2对应的类名,当然Class类中有很多种方法。

不知道大家发现了没有,Object类的toString()作用就是c.getName()+Integer.toHexString(d2.hashCode())的结果。

每日一练:

自己写一个类重写Object父类的toString()方法,改成输出你的名字+类的名字。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值