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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛晓东 中级黑马   /  2014-5-28 16:12  /  1297 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 葛晓东 于 2014-5-28 23:36 编辑

是不是父类中有有参构造函数,子类就必须有与父类构造函数有相同参数的构造函数?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

4 个回复

倒序浏览
子类不可以复写父类额构造函数 ,构造函数只能在本类中出现
另外如果父类,有多个重载构造方法,子类的构造方法,只要访问其中一个即可。
回复 使用道具 举报
本帖最后由 never615 于 2014-5-28 17:35 编辑

首先明白这几点知识:
1.一个类你不写构造函数系统会默认有一个的,如果你写了一个不管是带不带参数的,系统就不会默认写那个空的构造函数了
2.默认的构造函数第一句是super()


比如下面这个例子:如果只在Person里面写了一个带参的构造函数,系统就不会为他写空的了                               当Student继承Person,里面什么都不写时: 系统会给他默认一个空的构造函数并且第一句是super()    !!问题出现了 ,Person里面并没有空参的构造函数,所以这样调用是错误的

                               要不你手动给Person加一个空的构造函数,要不你子类也写一个带参的构造函数构造函数。里面也要写上super语句,不写就是super()有爆错了!!像这个例子就写上super(name)
所以你的问题,并不是只要父类有带参的构造函数,你就要写与父类构造函数有相同参数的构造函数,你什么构造函数都不写,给父类加一个空的构造函数就行。
class Person
{
        private String name;
        //Person()
        //{}
        Person(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }

}
class Student extends Person
{
        //Student(String name)
        //{
                ////super(name);
        //}
}


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

回复 使用道具 举报
never615 发表于 2014-5-28 17:30
首先明白这几点知识:
1.一个类你不写构造函数系统会默认有一个的,如果你写了一个不管是带不带参数的,系 ...

很详细~~~
回复 使用道具 举报

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