有没有一种方法可以调用一个父类构造函数,该构造函数从一个不具有自己构造函数的子类中获取参数?

时间:2019-01-24 03:49:52

标签: java inheritance constructor super

众所周知,父类必须在子类之前构造;如果父类的构造函数接受参数,则必须显式调用父类的构造函数。我的问题是,如果子类本身没有构造函数,那么如何调用从子类显式获取参数的父类构造函数?

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?
}

3 个答案:

答案 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);
    }
}