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

java中子类有无参和有参两种构造方法,父类只有无参的构造
在Java中,子类构造方法的调用依赖于父类构造方法的存在。若父类具备无参构造方法,子类无需显式调用super()。反之,若无参构造方法不存在,子类必须手动调用super(xxx),否则将引发编译错误。当父类既包含无参构造方法,也提供了有参构造方法时,子类在继承时默认会调用无参构造方法。这种情况下,子类...

JAVA中 子类与父类构造方法的关系 个人理解
二、父类含有含参数的构造方法,不含无参数的构造方法:子类没得选择:子类必须申明一个构造方法(且含super的args),且方法里要首先调用super(args),否则报错。三、父类含 含参数的构造方法和无参的构造方法:此时子类可以选择性调用:可以无构造方法:仍会默认调用super()也可以有构造方法:其中...

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

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

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

为什么Java反射对象必须有一个无参数的构造方法?
带参数的构造方法就是初始化的时候赋值!java创建带参构造方法必须创建无参构造方法吗 如果父类中已经构建过无参方法,子类不需要重新构建,也就是说必须有一个继承类中有无参构造方法。 如果父类中没有此构造方法,那么必须在子类中进行无参构造,否则子类会一直提示需要重写父类方法。 备注:这个...

相似回答