关于this, 在这里this代表什么??

ZhouBoTong 2005-10-20 12:08:59
我写了一个测试程序,如下:

class base {
public boolean equals(Object obj) {
if (this == obj) return true;
if (this.getClass() != obj.getClass()) return false; // 1
return true;
}
}

class derived extends base {
public boolean equals(Object obj) {
if (this == obj) return true;
if (this.getClass() != obj.getClass()) return false;
return super.equals(obj); // 2
}
}

然后,用下面的方法试图运行上面两个类的equals方法(在// 2处调用了base的equals()):

derived d1 = new derived();
derived d2 = new derived();
System.out.println(d1.equals(d2));

我想问的是在上面的// 1处的this.getClass()返回的为什么是derived的Class,而不是base的Class,也就是说,为什么// 1处的this是derived,而不是base??
...全文
623 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhouBoTong 2005-12-29
  • 打赏
  • 举报
回复
up
zeq258 2005-12-27
  • 打赏
  • 举报
回复
近来凑个热闹!
天天实习 2005-12-26
  • 打赏
  • 举报
回复
我给你说一个::::::::::::::::::::::::::::::
就是谁来调用,this就是谁,!!!!!!!
记住没错!
Asea2005 2005-12-22
  • 打赏
  • 举报
回复
this实际上就是得到当前所在类的句柄,可以通过这个句柄对它的属性和方法进行操作
figoren 2005-12-21
  • 打赏
  • 举报
回复
chshanhaojuan(无极) 分析的已经很清楚了
当执行super.equals(obj)的时候 实际上是带了二个参数
super.euqals(this,obj) 而此处的this就是hello1
所以在base类中的this也指向了hello1
小北小竹 2005-12-16
  • 打赏
  • 举报
回复
应该是动态绑定阿!
gxlcl 2005-12-15
  • 打赏
  • 举报
回复
建议看看反射机制.
ZhouBoTong 2005-12-12
  • 打赏
  • 举报
回复
up
xpzheng 2005-12-08
  • 打赏
  • 举报
回复
学习。。。。
bizhenchao1201 2005-12-08
  • 打赏
  • 举报
回复
this就是指的当前对象
Mr_Yang 2005-12-07
  • 打赏
  • 举报
回复
mark
greenteanet 2005-12-07
  • 打赏
  • 举报
回复
动态绑定
lilygt 2005-12-07
  • 打赏
  • 举报
回复
学习
david158679 2005-12-06
  • 打赏
  • 举报
回复
我觉得是动态绑定,在thinking in java中有详细的说明。
ZhouBoTong 2005-12-05
  • 打赏
  • 举报
回复
up
ZhouBoTong 2005-11-01
  • 打赏
  • 举报
回复
楼上,哪本书里面有这方面的描述阿
liu_you 2005-10-28
  • 打赏
  • 举报
回复
这个继承实现与super.equals()有啥区别?
this,反正就是当前对象的引用,无论在哪里.
ZhouBoTong 2005-10-28
  • 打赏
  • 举报
回复
这里有没有java的有关这方面的原则性的论述呢?
chshanhaojuan 2005-10-28
  • 打赏
  • 举报
回复
写错了;改正为
this在子类的引用值为:=Hello@720eeb
在父类中的引用值为:= Hello@720eeb
这说明他们指的是同一个引用;
也属于用一个class;
chshanhaojuan 2005-10-28
  • 打赏
  • 举报
回复
class base {
public boolean equals(Object obj)
{
System.out.println(this);
System.out.println(obj);
if (this == obj)
{
System.out.println("3");
return true;
}
if (this.getClass() != obj.getClass())
{
System.out.println("4");
return false; // 1
}
System.out.println("6");
return true;
}
}

public class Hello extends base {
public boolean equals(Object obj) {
System.out.println(this);
System.out.println(obj);
if (this == obj)
{
System.out.println("1");
return true;
}
if (this.getClass() != obj.getClass())
{
System.out.println("2");
return false;
}
System.out.println("5");
return super.equals(obj); // 2
}
public static void main(String[] args)
{
Hello hello1 = new Hello();
Hello hello2 = new Hello();
System.out.println(hello1.equals(hello2));
}
}
输出的结果是
Hello@720eeb
Hello@3179c3
5
Hello@720eeb
Hello@3179c3
6
true
Press any key to continue...
在这里表明你的程序中根本就没有执行你if else里面的语句;
直接返回最后的结果true;
其实什么也没做;
(this,反正就是当前对象的引用,无论在哪里.)这句话就是你要的结果;
在这里面
this在子类的引用值为:=Hello@720eeb
在父类中的引用值为:= Hello@3179c3
这说明他们指的是同一个引用;
也属于用一个class;
加载更多回复(21)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧