在子类显示调用父类带参构造函数时,系统还会自动调用父类的无参构造函数吗?
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);
}
}
为什么我把父类的无参构造函数注释后,编译报错? 展开
{
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);
}
}
为什么我把父类的无参构造函数注释后,编译报错? 展开
6个回答
展开全部
因为你定义的Sub的无参构造方法需要调用父类的无参构造方法。你把子类Sub的无参构造方法注释掉,那就正确了。证明了子类显示调用父类带参构造函数时,系统还会自动调用父类的无参构造函数是正确了
追问
但是new Sub(100)不是也没有要调用子类的无参构造函数吗?那为什么还要调用父类的无参构造函数?
追答
注意:如果Sub有参构造方法,就不需要调用Sub无参构造方法了。
这应该是编译器规定,它觉得你既然定义了Sub的无参构造函数,就有可能调用到new Sub()去构造对象,而这个构造函数需要用到父类 Base的无参构造函数,以上,你懂得。
展开全部
你试试把子类的无参构造函数也注释掉,个人觉得编译的时候,会编译子类的无参构造函数,这会用到父类的构造函数,所以会影响。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一种规范! 当你没有编写 构造函数时,会默认一个 无参的构造函数! 当你编写带参的构造函数时! 就没有默认了! 所以 必须显示的编写! 而且当你new 子类时! 编译器 也是先进入父类的无参构造函数! 子类 无参 构造函数你可以注释掉! 但是当你再 main 里面 new 子类时 不带参就会报错了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会的 主要是你没有注释掉下面的无参方法
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);
}
}
这样就可以了
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);
}
}
这样就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有给类写构造函数时,系统默认有个无参的构造函数;
1、一旦你手动写了构造函数,就会覆盖默认的构造函数;
2、当主动写带参数的构造函数时,最后写个无参的构造函数,避免有时不想调有参构造函数时,可以调用无参的。
1、一旦你手动写了构造函数,就会覆盖默认的构造函数;
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");
}
}
该类已经没有无参构造函数了,除非你显式的声明即打开注释
综上所以说是不会调用的
说白了构造函数就是给对象初始化数据的
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");
}
}
该类已经没有无参构造函数了,除非你显式的声明即打开注释
综上所以说是不会调用的
说白了构造函数就是给对象初始化数据的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询