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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁野 黑马帝   /  2012-3-6 14:03  /  2727 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Cannot refer to an instance field name while explicitly invoking a constructor 这是错误的提示
public class super_this语句结合 {
        public static void main(String[] args) {
                Students s = new Students("袁野");
        }
}

class Person {
        protected String name;

        // Person(){}
        Person(String name) {
                this.name = name;
        }
};

class Students extends Person {
        Students() {
                // super();
                super(name); --------------在这里出现错误
        }

        Students(String name) {
                this();
                System.out.println("name");
        }

};

说无法实例! 为什么啊? 求解?

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
Students() {
                // super();
                super(name); --------------在这里出现错误
        }

这里没有定义name,为什么突然作为参数传进去

评分

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

查看全部评分

回复 使用道具 举报
不需要第一个无参数的构造方法了,直接在第二个改 Students(String name) {
                super(name);
                System.out.println("name");
        }

回复 使用道具 举报
本帖最后由 王亚男 于 2012-3-6 14:25 编辑

楼上正解。你把那个name误解成父类的了,其实本意应该是子类构造函数的name传给父类的name,你要放在下面的构造函数里就可以了。不过,this()就得去掉了。因为都要放在句首,会起冲突。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 程洪 于 2012-3-6 14:36 编辑

父类中 没有无参的构造方法  你的无参构造方法 又怎么能传入 super呢?

所以你继承了 所以 你需要复写父类的构造方法 应该是
Students(String name) {
                super(name);
                System.out.println("name");
        }

而你定义的 Students(){} 空参数的构造方法 是不需要super的

评分

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

查看全部评分

回复 使用道具 举报
解决了 !! 谢谢~~~~~~~
回复 使用道具 举报

子类构造函数中调用父类构造函数:super(参数列表)的方式调用,该参数列表与父类有参构造函数声明的参数列表一致,如果你不是在子类构造函数中调用,则无法直接调用父类构造函数,这时创建一个父类对象(通过你想调用的有参父类构造函数创建),就间接调用了该构造函数。
super(name); name不是父类成员变量Sring类型,所以出现错误,name得加上" "。
回复 使用道具 举报
Students() {
                // super();
                super(name); --------------在这里出现错误
        }

super(name);的作用是将自己接收到的参数name传递给父类的对应的构造方法,父类中已经写好了的东西,子类直接super()调用即可,继承的优点
而此处你的这个构造方法并没有参数,是个空参构造方法,并没有参数可以传给父类的 带 name参数的构造方法

Cannot refer to an instance field name while explicitly invoking a constructor
直译一下就是“不能在明确地调用这个构造方法的同时,引用这个实例字段name”

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

回复 使用道具 举报
学习了~
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马