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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张敬培 中级黑马   /  2013-2-1 23:14  /  2086 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中什么时候使用super,什么时候使用this。他俩的区别是什么?

8 个回复

倒序浏览
本帖最后由 张世钦 于 2013-2-1 23:23 编辑

super是父类对象的引用,
this是谁调用当前对象就指向谁

如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this子类要访问父类中的同名变量,用super。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
this是指对象本身,当你想要引用当前对象的某个方法或当前对象的某个成员时,你可以用this,
this只能在类中的非静态方法中使用,静态方法和静态代码块中绝不能出现this。

super则是代表其父类。子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
为了完成这个必须的动作,就在子类的构造函数中加入了super()语句。

注意:如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
父类中哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,
那么super就没有了,因为super和this都只能定义第一行。所以只能有一个。
但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。

就知道这么多了,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
super的出现必须是在子类中,在子类中想要访问父类的构造函数时,必须通过super();方法访问,所以super是指向父类的。this是指向本身的,想要引用自己本身的对象时,可以用this作为自指。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
在写构造函数的时候要注意,当你写了有参构造后,如果无参你没写,那么默认隐藏的那个无参就没了。尤其要注意父类的。
因为此时你的子类要明确的写出super(参数),指定调用父类的哪个构造函数。
还有一个构造方法里,不能同时有super 和 this,因为那相当于调用了两次构造。
还有子类必须有一个去调用父类的构造方法。如果不写,默认第一行会执行super()

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
super是指父类对象的引用,super是指当前类调用的对象的引用,在本类的构造函数中可以使用super指定调用父类的某一个构造函数,也可以用this调用自己的构造函数。但是必须要先调用父类的(哪怕是默认无参的构造函数),而且在构造函数中this()和super()都必须在第一行,因此不能同时出现。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
陈迎春 来自手机 中级黑马 2013-2-3 14:28:26
7#
学习了,谢谢回复!来自: Android客户端
回复 使用道具 举报
杨芳 来自手机 中级黑马 2013-2-3 14:43:35
8#
顶一下!来自: Android客户端
回复 使用道具 举报
我补充一下:this和super都是存在于方法区中的非静态方法区中的,就像上面岳林说的,是不能出现在静态方法中的。
而且,在内存加载的时候,是先加载子类的对象之后,才会在方法区中出现this和super的。
子类的构造函数中有一个隐式的构造函数,即super();(如果父类中没有显式的构造函数的话),此时就不能再写this();了,因为super()和this()不能同时出现在第一条语句。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马