簡體   English   中英

在java中調用父構造函數

[英]Call parent constructor in java

我有兩個類ParentChild ,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM