A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© ★魔_➩τ咒 中级黑马   /  2014-5-28 07:56  /  1180 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

this表示当前对象,也就是当前类对象,super表示当前类的父类。
例如:
你定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();
那么,在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();
主要区别还是一个是当前对象,一个是当前父类!

4 个回复

倒序浏览
在什么情况下需要用到this:
第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
        第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
        第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
        其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

super的用法:
第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
        第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
        第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。

        this、super的用法也不过这些,只有理解了其中的原理,才不会跌入陷阱!

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 七弦 于 2014-5-28 08:14 编辑

没说全,就像用this()访问本类构造函数和super()访问父类构造函数,隐藏的super语句,父类没有空参构造函数子类要手动访问。
还有this用在本类引用对象上,静态中不能用super和this关键字,
super语句和this语句只能放在构造函数第一行,而且不能同时出现在一个构造函数内等等。。。

欢迎交流!
回复 使用道具 举报
编辑一下就被抢了沙发:L
回复 使用道具 举报
一楼二楼总结的很全面啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马