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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周亮 中级黑马   /  2012-12-30 14:08  /  1955 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么Super语句为什么不能与this共存?
构造方法:
       
        super();
        this();

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

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 马志军 于 2012-12-30 14:14 编辑

this(),super()都要放在第一行,因为初始化子类要先初始化父类,所以super()必须在最前,如果需要调用无参构造方法,那么说明它也是要先初始化的然后再初始化自己剩下的代码,所以this()要放最前,如果说要用this(),还放super()那就冲突了。
调用了this(),而这个无参的构造方法本身第一行有个隐式的super(),所以虽然用Demo(int age)这个构造方法,里面没有写super(),但是依然相当于已经调用了super()

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
this关键字总是指向调用该方法的对象,所代表的是当前类,谁在调用这个方法,this就代表谁。而super关键字是用于限定来调用从父类继承得到的属性和方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
子类从父类继承的时候,子类内部实际上已经包含了一个父类对象——并且内部自动调用super关键字指向了这个父类对象;
this()的一个用法就是在构造函数中调用参数个数等于this的参数个数相同的构造函数
this 调用的这个类本身的构造方法,不是超类的构造方法~~
这个和this的另外一个用法要区分开
只有在构造函数中才有这种用法~~
而且不能和super()一起用~~

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
this()调用的是自身类中的方法。
super()调用的是父类中的方法。
回复 使用道具 举报
在本类或者是子类中this()调用的是自身类中的方法,也就是本类的方法就相当于本类的对象。
而super()调用的是父类中的方法,也就是相当于父类的对象,在子类中使用Super(),则是调用父类的方法,,或者说使用的是父类的对象
this 和super 使用的地方不同    不可以同时放在一个地方使用 。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
操作的是哪个对象,哪个对象就是this。
当前类的引用。
例如在Person类中使用this,那么this就是Person类的引用。
this不能被赋值,例如this = new Person()是错误的。

在类中,所有部分出现的地方,其实前面都可以加上this。this就是那个整体
回复 使用道具 举报
注意一点:生成子类对象时,Java默认首先调用父类的不带参数的构造方法,接下来再去调用子类的构造方法,生成子类对象。
如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类不带参数的构造方法。
super与this一样,必须要作为构造函数的第一条执行语句,前面不能有其他可执行语句。
所以你的第二个构造函数,要么第一句是super(),要么是this(),不能同时有。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马