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

© 山水游客 中级黑马   /  2012-6-16 16:47  /  1749 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙胜录 于 2012-6-18 23:10 编辑

class Person

{

        private String name;
        

//        Person(){  //注释掉,子类就会报错

//               
//       }

        public Person(String name)

        {

                this.name=name;

        }

        public String getName()

        {

                return name;

        }

}

class Student extends Person

{        
                String name;

                Student(String name){ // 要我必须

                        this.name = name ;

        }        
        
}
注释掉了person()后,子类就必须调用super,而在父类中显示定义了Person()以后,子类就可以随便定义构造函数了··。
子类自己定义自己的构造函数咋就不可以呢。为什么非要调用父类的super()呢??

4 个回复

倒序浏览
子类在调用构造方法的时候,必定要先调用父类的构造方法,在其内部建立一个父类对象,,这样就拥有了父类的方法和属性,要不然怎么继承父类的这些方法的属性呢?
回复 使用道具 举报
首先子类是不可以自己定义构造函数的。。。必须调用父类才可以的。。。注释掉了person()后,子类就无法调用了、、、但是可以通过super关键字调用其父类的构造函数。。。这样子类才可以自己定义构造函数。。。子类是继承了父类的所有特性的。。。这是我自己的理解。。。希望你能够明白。。。
回复 使用道具 举报
首先任何类都有构造方法,java怕你忘写,也会默认你有一个有无参构造方法。
所以你的Person里面就会有一个叫Person()的构造方法。
当你注释掉Person(),而且你又重写了一个带参数的构造方法,
那么你写super(),里面没有参数是无法调用父类构造方法的,
还有就是因为你的Student是子类 既然是继承了Person(),那么就应该拥有
Person的一切非私有属性,所以就必须super()调用父类构造方法,重新创造一个既带有父类成员,
又带有子类成员的对象.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马