众所周知,父类必须在子类之前构造;如果父类的构造函数接受参数,则必须显式调用父类的构造函数。我的问题是,如果子类本身没有构造函数,那么如何调用从子类显式获取参数的父类构造函数?
public class A {
public String text;
public A(String text) {
this.text = text;
}
}
public class B extends A {
// Now I must call the constructor of A explicitly (other wise I'll get a
// compilation error) but how can I do that without a constructor here?
}
答案 0 :(得分:5)
答案是:你做不到!
如果超类具有无参数构造函数,则编译器也可以在子类中为您添加类似的构造函数。
但是当超类需要参数时,编译器不知道这些参数应该从哪里来。
所以:考虑向超类添加一个no args构造函数,它可以调用其他构造函数并传递某种默认值。或者,您可以在派生类中执行相同的操作。
仅作记录:没有构造函数,就没有Java类。只是编译器可能会在后台为您创建一个。从这个角度来看,您的问题没有多大意义。
答案 1 :(得分:2)
由于类<body bgcolor="#faf7fd">
<ul class="navigation">
<li><a href="#">Home</a></li>
<li><a href="#">Products</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
<div class="search_box">
<form>
<input type="text" value="Search" onfocus="this.value = ''; {this.value='Search' ;}">
<input type="submit " value=" ">
</form>
</div>
</body>
中没有默认构造函数,因此出现编译错误。您可以在A
中创建一个无参数构造函数,并将一些默认文本传递给B
的构造函数,或者在A
中创建一个无参数构造函数。
A
答案 2 :(得分:0)
如果您不愿意直接调用父构造函数,则只需在子类中添加一个具有相同参数的构造函数即可,该子类仅调用父构造函数。
public class A {
public String text;
public A(String text)
{
this.text = text;
}
}
public class B extends A
{
public B(String text)
{
super(text);
}
}