黑马程序员技术交流社区
标题:
super和this的区别
[打印本页]
作者:
张敬培
时间:
2013-2-1 23:14
标题:
super和this的区别
java中什么时候使用super,什么时候使用this。他俩的区别是什么?
作者:
张世钦
时间:
2013-2-1 23:21
本帖最后由 张世钦 于 2013-2-1 23:23 编辑
super是父类对象的引用,
this是谁调用当前对象就指向谁
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this子类要访问父类中的同名变量,用super。
作者:
刘岳林
时间:
2013-2-2 00:03
this是指对象本身,当你想要引用当前对象的某个方法或当前对象的某个成员时,你可以用this,
this只能在类中的非静态方法中使用,静态方法和静态代码块中绝不能出现this。
super则是代表其父类。子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
为了完成这个必须的动作,就在子类的构造函数中加入了super()语句。
注意:如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
父类中哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,
那么super就没有了,因为super和this都只能定义第一行。所以只能有一个。
但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。
就知道这么多了,希望对你有帮助
作者:
钱志新
时间:
2013-2-2 01:12
super的出现必须是在子类中,在子类中想要访问父类的构造函数时,必须通过super();方法访问,所以super是指向父类的。this是指向本身的,想要引用自己本身的对象时,可以用this作为自指。
作者:
杨浩
时间:
2013-2-2 19:59
在写构造函数的时候要注意,当你写了有参构造后,如果无参你没写,那么默认隐藏的那个无参就没了。尤其要注意父类的。
因为此时你的子类要明确的写出super(参数),指定调用父类的哪个构造函数。
还有一个构造方法里,不能同时有super 和 this,因为那相当于调用了两次构造。
还有子类必须有一个去调用父类的构造方法。如果不写,默认第一行会执行super()
作者:
王立浩
时间:
2013-2-3 09:27
super是指父类对象的引用,super是指当前类调用的对象的引用,在本类的构造函数中可以使用super指定调用父类的某一个构造函数,也可以用this调用自己的构造函数。但是必须要先调用父类的(哪怕是默认无参的构造函数),而且在构造函数中this()和super()都必须在第一行,因此不能同时出现。
作者:
陈迎春
时间:
2013-2-3 14:28
学习了,谢谢回复!
作者:
杨芳
时间:
2013-2-3 14:43
顶一下!
作者:
黄玉昆
时间:
2013-2-8 19:45
我补充一下:this和super都是存在于方法区中的非静态方法区中的,就像上面岳林说的,是不能出现在静态方法中的。
而且,在内存加载的时候,是先加载子类的对象之后,才会在方法区中出现this和super的。
子类的构造函数中有一个隐式的构造函数,即super();(如果父类中没有显式的构造函数的话),此时就不能再写this();了,因为super()和this()不能同时出现在第一条语句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2