JAVA的父类中是不是一定要有无参数的构造方法?为什么我不在父类中写空参数的构造方法就不能编译通过呢

如题所述

这个问题呢是这样的,当我们创建一个类的时候,如果我们没有创建一个构造方法(哪怕是无参数的)。JVM会帮助我们创建一个默认的构造方法,也称为无参构造方法。但是如果我们创建一个构造方法时,JVM就不会再为我们生成一个默认的构造方法。有时有必要的显示的写出这个默认构造函数,也就是无参构造函数。所以当这个类被继承时,子类就会默认的调用这个无参构造方法。
如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写无参构造方法,那么在子类的构造方法中必须显示的调用父类中的有参数的构造方法(写在第一句)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-18
不一定。
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);
}
}

第2个回答  2012-04-18
每个构造方法第一句代码都必须是super(),这意思是请求调用父类的构造方法,
因为每个对象在构造成功以前,都必须先构造其父亲,父亲成功造了,才能有儿子撒。
在默认情况下,每个类如果你不写构造方法,它们都会有一个无参的空构造方法。
你报错的原因,是因为你在子类构造方法中调用了父类有参的构造方法,而编译器发现,父类中只有无参的构造方法,找不到你那个对应的。所以它认为你的父类对象构造失败,没父,哪能有儿?

JAVA的父类中是不是一定要有无参数的构造方法?为什么我不在父类中写空...
有时有必要的显示的写出这个默认构造函数,也就是无参构造函数。所以当这个类被继承时,子类就会默认的调用这个无参构造方法。如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写无参构造方法,那么在子类的构造...

java中为什么父类必须有无参构造方法才能被子类继承?
子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。

java进行构造方法的时候,为什么一定要有一个无参构造方法?
2.无参构造函数是所有构成函数的父类,如果没有写那个默认的不带参数的构造函数的话,继承的时候子类就会报错,因为系统不知道要不继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误的发生,在有带有多个构造函数的类里面都会写一个不带参数的构造函数。出自育知同创教育,...

java创建带参构造方法必须创建无参构造方法吗
如果你没有定义构造方法,编译器会自动给你加一个无参的,但是当你定义了有参的构造方法时,就不会给你自己加一个了,所以这时候需要自己写一个无参的。

...不带参数的抽象方法,子类可以要怎么写构造方法?不写吗?
可以不写 但如果子类需要带参数的构造方法,就必须写一个无参的,然后super();

java假设父类中定义了一个带有参数的构造函数,那在子类构造函数(除注 ...
不用……一般如果自己写了带参构造函数,就需要自己手动写一个无参构造函数。你不写有参的构造函数,就会默认的生成一个无参构造函数。上面这个问题只需要在父类自己写个无参构造函数就没有问题了,其实这样的问题,你可以在IDE上敲代码试试就知道了,可能印象会更深刻一点 ...

java类中定义构造函数时定义了一个有参数的构造函数 ,是否必须定义空参 ...
不用了,因为你自己定义了有参的构造函数以后,其实已经调用了无参的构造函数(其实你自己写的构造函数会默认调用this();方法,只不过写不写都一样,不信你在你的有参构造的第一句,必须第一句,写this();试试),自己定义了有参构造函数以后,就必须用有参构造函数来初始化了,这个你懂得 ...

Java构造函数 为什么需要无参构造函数
补充下楼上的回答~~“但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败"这句话有点不妥,应该这么理解:每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的...

java中子类有无参和有参两种构造方法,父类只有无参的构造
当父类既包含无参构造方法,也提供了有参构造方法时,子类在继承时默认会调用无参构造方法。这种情况下,子类可省去调用super()的步骤。若子类未定义任何构造方法,Java编译器会在子类中自动添加一个无参构造方法。此规则与其他情况相似,旨在确保子类能够正确地调用父类的构造方法。

java关于子类和父类构造方法的关系,犯迷糊!!
子类不能继承父类的显式定义的构造方法,若想要继承父类的构造方法,需要通过覆盖该构造方法,并在方法中通过super调用父类的该构造方法的方式来继承。三种情况说明:1、父类中没有显式定义任何构造方法,此时父类中实际有一个默认的无参数构造方法。这时,在子类中显式定义任何构造方法时,可以不用使用...

相似回答