在子类显示调用父类带参构造函数时,系统还会自动调用父类的无参构造函数吗?

publicclassBase{intn;/*publicBase(){System.out.println("basewucan");}*/publicBase(int... public class Base
{
int n;
/*public Base()
{
System.out.println("base wucan");
}*/

public Base(int n)
{
this.n = n;
System.out.println("Base daican");
}
}

class Sub extends Base
{
public Sub()
{
System.out.println("Sub wucan");
}
public Sub(int n)
{
super(200);
System.out.println("Sub daican"+ this.n);
}
public static void main(String[] args)
{
System.out.println(new Sub(100).n);
}
}

为什么我把父类的无参构造函数注释后,编译报错?
展开
 我来答
小凡797
2011-09-29 · TA获得超过249个赞
知道小有建树答主
回答量:81
采纳率:0%
帮助的人:107万
展开全部
因为你定义的Sub的无参构造方法需要调用父类的无参构造方法。你把子类Sub的无参构造方法注释掉,那就正确了。证明了子类显示调用父类带参构造函数时,系统还会自动调用父类的无参构造函数是正确了
追问
但是new Sub(100)不是也没有要调用子类的无参构造函数吗?那为什么还要调用父类的无参构造函数?
追答
注意:如果Sub有参构造方法,就不需要调用Sub无参构造方法了。
这应该是编译器规定,它觉得你既然定义了Sub的无参构造函数,就有可能调用到new Sub()去构造对象,而这个构造函数需要用到父类 Base的无参构造函数,以上,你懂得。
百度网友ce40ad9
2011-09-29
知道答主
回答量:48
采纳率:0%
帮助的人:19.1万
展开全部
你试试把子类的无参构造函数也注释掉,个人觉得编译的时候,会编译子类的无参构造函数,这会用到父类的构造函数,所以会影响。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小吴IT同学
2011-09-29 · 超过11用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:23.9万
展开全部
这是一种规范! 当你没有编写 构造函数时,会默认一个 无参的构造函数! 当你编写带参的构造函数时! 就没有默认了! 所以 必须显示的编写! 而且当你new 子类时! 编译器 也是先进入父类的无参构造函数! 子类 无参 构造函数你可以注释掉! 但是当你再 main 里面 new 子类时 不带参就会报错了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baby_子夜
2011-09-29
知道答主
回答量:6
采纳率:0%
帮助的人:9922
展开全部
不会的 主要是你没有注释掉下面的无参方法

class Sub extends Base
{
/* public Sub()
{
System.out.println("Sub wucan");
}*/
public Sub(int n)
{
super(200);
System.out.println("Sub daican"+ this.n);
}
public static void main(String[] args)
{
System.out.println(new Sub(100).n);
}
}
这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lb999999999
2011-09-29 · TA获得超过611个赞
知道小有建树答主
回答量:1165
采纳率:0%
帮助的人:787万
展开全部
没有给类写构造函数时,系统默认有个无参的构造函数;
1、一旦你手动写了构造函数,就会覆盖默认的构造函数;
2、当主动写带参数的构造函数时,最后写个无参的构造函数,避免有时不想调有参构造函数时,可以调用无参的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
467831889
2011-09-30 · TA获得超过149个赞
知道答主
回答量:80
采纳率:0%
帮助的人:46.2万
展开全部
1:子类调用父类的构造函数是为了给父类初始化数据,继承时也可以不调用不是必须调用
2:带参构造函数会覆盖无参造函数
public class Base
{
int n;
/*public Base()
{
System.out.println("base wucan");
}*/

public Base(int n)
{
this.n = n;
System.out.println("Base daican");
}
}
该类已经没有无参构造函数了,除非你显式的声明即打开注释
综上所以说是不会调用的

说白了构造函数就是给对象初始化数据的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式