我有两个类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- 这更像是一种方法,而不是细节.根据你的实际要求进行调整.)