JAVA的父类中是不是一定要有无参数的构造方法?为什么我不在父类中写空参数的构造方法就不能编译通过呢
3个回答
展开全部
这个问题呢是这样的,当我们创建一个类的时候,如果我们没有创建一个构造方法(哪怕是无参数的)。JVM会帮助我们创建一个默认的构造方法,也称为无参构造方法。但是如果我们创建一个构造方法时,JVM就不会再为我们生成一个默认的构造方法。有时有必要的显示的写出这个默认构造函数,也就是无参构造函数。所以当这个类被继承时,子类就会默认的调用这个无参构造方法。
如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写无参构造方法,那么在子类的构造方法中必须显示的调用父类中的有参数的构造方法(写在第一句)。
如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写无参构造方法,那么在子类的构造方法中必须显示的调用父类中的有参数的构造方法(写在第一句)。
展开全部
不一定。
java子类的构造过程方法必须调用父类的构造方法,java采用这种机制保证父类的初始化
不显式调用的时候编译器会默认调用父类的无参那个,如果父类没有就报错。
所以你的情况可以在子类中显式调用父类的有参的构造方法。
java子类的构造过程方法必须调用父类的构造方法,java采用这种机制保证父类的初始化
不显式调用的时候编译器会默认调用父类的无参那个,如果父类没有就报错。
所以你的情况可以在子类中显式调用父类的有参的构造方法。
追问
怎么显式调用?
追答
用super关键字,例如
class A {
private String name;
public A(String name) {
this.name = name;
}
}
public class B extends A {
public B() {
super("张三");
}
public B(String name) {
super(name);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个构造方法第一句代码都必须是super(),这意思是请求调用父类的构造方法,
因为每个对象在构造成功以前,都必须先构造其父亲,父亲成功造了,才能有儿子撒。
在默认情况下,每个类如果你不写构造方法,它们都会有一个无参的空构造方法。
你报错的原因,是因为你在子类构造方法中调用了父类有参的构造方法,而编译器发现,父类中只有无参的构造方法,找不到你那个对应的。所以它认为你的父类对象构造失败,没父,哪能有儿?
因为每个对象在构造成功以前,都必须先构造其父亲,父亲成功造了,才能有儿子撒。
在默认情况下,每个类如果你不写构造方法,它们都会有一个无参的空构造方法。
你报错的原因,是因为你在子类构造方法中调用了父类有参的构造方法,而编译器发现,父类中只有无参的构造方法,找不到你那个对应的。所以它认为你的父类对象构造失败,没父,哪能有儿?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询