[英]Call parent constructor in java
我有兩個類Parent
和Child
,而Parent
有一個需要3個參數的構造函數:
class Parent{
public Parent(String host,String path,int port){
}
}
現在我希望Child
構造函數只需要一個參數,然后我嘗試做這樣的事情:
class Child extend Parent{
public Child(String url){
String host=getHostFromUrl(url);
String path=....
String port=...
super(host,path,port);
}
}
但這不起作用。
有什么想法解決它嗎?
順便說一句,我無法訪問Parent
類。
對super
的調用必須是構造函數體中的第一個語句。 從JLS第8.8.7節開始 :
構造函數體的第一個語句可能是對同一個類或直接超類(§8.8.7.1)的另一個構造函數的顯式調用。
你只需要內聯調用:
public Child(String url) {
super(getHostFromUrl(url), getPathFromUrl(url), getPortFromUrl(url));
}
或者,解析一次 URL的更清晰表示,並在同一個類中調用另一個構造函數:
public Child(String url) {
this(new URL(url));
}
// Or public, of course
private Child(URL url) {
super(url.getHost(), url.getPath(), url.getPort());
}
(我沒有檢查這些成員是否適用於java.net.URL
- 這更多是通過一種方法而不是細節。根據您的實際需求進行調整。)
嘗試類似的東西
public class Parent {
public Parent(String host, String path, int port) {
}
}
class Child extends Parent {
public Child(String url) {
super(getHost(url), getPath(url), getPort(url));
}
static String getHost(String url) {
// Logic to calculate host
return url;
}
static String getPath(String url) {
// Logic to calculate path
return url;
}
static int getPort(String url) {
// Logic to calculate port
return 8080;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.