黑马程序员技术交流社区

标题: 关于构造器 [打印本页]

作者: 周亮    时间: 2012-12-30 14:08
标题: 关于构造器
为什么Super语句为什么不能与this共存?
构造方法:
       
        super();
        this();

        class Demo
        {
                Demo(){
                        this(20);
                }

                Demo(int age)
                {
                        super();
                        //this();
                }
        }


作者: 马志军    时间: 2012-12-30 14:13
本帖最后由 马志军 于 2012-12-30 14:14 编辑

this(),super()都要放在第一行,因为初始化子类要先初始化父类,所以super()必须在最前,如果需要调用无参构造方法,那么说明它也是要先初始化的然后再初始化自己剩下的代码,所以this()要放最前,如果说要用this(),还放super()那就冲突了。
调用了this(),而这个无参的构造方法本身第一行有个隐式的super(),所以虽然用Demo(int age)这个构造方法,里面没有写super(),但是依然相当于已经调用了super()
作者: 王永彬    时间: 2012-12-30 14:26
this关键字总是指向调用该方法的对象,所代表的是当前类,谁在调用这个方法,this就代表谁。而super关键字是用于限定来调用从父类继承得到的属性和方法。
作者: 王少雷    时间: 2012-12-30 14:30
子类从父类继承的时候,子类内部实际上已经包含了一个父类对象——并且内部自动调用super关键字指向了这个父类对象;
this()的一个用法就是在构造函数中调用参数个数等于this的参数个数相同的构造函数
this 调用的这个类本身的构造方法,不是超类的构造方法~~
这个和this的另外一个用法要区分开
只有在构造函数中才有这种用法~~
而且不能和super()一起用~~
作者: 张会文    时间: 2012-12-30 14:41
this()调用的是自身类中的方法。
super()调用的是父类中的方法。
作者: 何创    时间: 2012-12-30 16:17
在本类或者是子类中this()调用的是自身类中的方法,也就是本类的方法就相当于本类的对象。
而super()调用的是父类中的方法,也就是相当于父类的对象,在子类中使用Super(),则是调用父类的方法,,或者说使用的是父类的对象
this 和super 使用的地方不同    不可以同时放在一个地方使用 。
作者: 何伟    时间: 2013-1-1 19:19
操作的是哪个对象,哪个对象就是this。
当前类的引用。
例如在Person类中使用this,那么this就是Person类的引用。
this不能被赋值,例如this = new Person()是错误的。

在类中,所有部分出现的地方,其实前面都可以加上this。this就是那个整体
作者: 王钊    时间: 2013-1-1 22:46
注意一点:生成子类对象时,Java默认首先调用父类的不带参数的构造方法,接下来再去调用子类的构造方法,生成子类对象。
如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类不带参数的构造方法。
super与this一样,必须要作为构造函数的第一条执行语句,前面不能有其他可执行语句。
所以你的第二个构造函数,要么第一句是super(),要么是this(),不能同时有。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2