在java中调用父构造函数

hgu*_*ser 2 java constructor

我有两个类Parent和Child,而Parent有其需要3个参数的构造函数:

class Parent{
    public Parent(String host,String path,int port){
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想Child构造函数只需要一个参数,然后我尝试做这样的事情:

class Child extend Parent{
    public Child(String url){
        String host=getHostFromUrl(url);
        String path=....
        String port=...
        super(host,path,port);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

有什么想法解决它吗?

顺便说一下,我无法Parent上课.

Jon*_*eet 12

调用super 必须是构造函数体中的第一个语句.从JLS第8.8.7节开始:

构造函数体的第一个语句可能是对同一个类或直接超类(§8.8.7.1)的另一个构造函数的显式调用.

你只需要内联调用:

public Child(String url) {
    super(getHostFromUrl(url), getPathFromUrl(url), getPortFromUrl(url));
}
Run Code Online (Sandbox Code Playgroud)

或者,解析一次 URL的更清晰表示,并在同一个类中调用另一个构造函数:

public Child(String url) {
    this(new URL(url));
}

// Or public, of course
private Child(URL url) {
    super(url.getHost(), url.getPath(), url.getPort());
}
Run Code Online (Sandbox Code Playgroud)

(我没有检查这些成员是否会工作java.net.URL- 这更像是一种方法,而不是细节.根据你的实际要求进行调整.)