2011-06-27 22 views
0

我有一個像其擴展的超子類如何調用父類的構造器

class A{ 

    //Constructors only called by builder. 

public static class builder{ 
    //builder code. 
    } 
} 

Class B Extends ClassA{ 
    //constrctor 

} 

父類現在,如果我在我的測試做

final classA dempClassA = new ClassB("parameters here"); 

如何我現在所說的建設者..?

對不起,建設者是一個類...我的錯誤。

+0

你在問構造器類是否知道子類?如果是這樣,不好的設計:類不應該引用它們的子類。考慮將構建器類移入其自己的頂級類。 – Bohemian

回答

1

如果我明白你想說什麼好,你有以下情況:

public class ClassA { 

    // Constructors only called by builder. 

    public static class Builder { 
     // builder code. 
     public static void hello() { 
      System.out.println("Hello"); 
     } 

     public void hello1() { 
      System.out.println("Hello1"); 
     } 
    } 
} 

你可以這樣訪問它:

class ClassB extends ClassA { 
    public static void main(String[] args) { 

     ClassA.Builder.hello(); 
     ClassA.Builder builder = new Builder(); 
     builder.hello1(); 

    } 
} 
0

如果你想從A類以外調用該方法,那麼它不應該是私有的。

如果你只是希望它成爲B創建過程的一部分,那麼你應該做這樣的事情:(?是一個類BTW或返回類型失蹤)

class B extends A { 

    public B() { 
    super(); // invokes A's constructor 
    } 
} 

class A { 
    public A(){ 
    // use builder() here 
    } 
} 
0

由於builder是靜態的,你可以稱它爲A.builder()。而對於它是可見的,你不應該讓私人:)

編輯:因爲它是一個類,你有幾種可能:

  • 如果你需要一個新的實例調用new A.builder(...)
  • 如果製造商提供了靜態方法(在這種情況下的問題是,爲什麼這是一個類)調用A.builder.someStaticMethod(...)
+0

對不起,這是一個類。我試圖實現構建器模式。 –

0

讓ClassA的的builder方法protected(而不是private),所以他們看到ClassB的,然後使用匿名類來調用它,就像這樣:

ClassA tempClassA = new ClassB("parameters here") { 
    { 
     // This block is called during construction 
     builder(); 
    } 
}; 
+0

我想不出真實世界的場景,我真的想用這樣的東西 –

+0

真的嗎?我一直這樣做。特別是當使用靜態值填充地圖時 - 我從一個匿名實例塊中調用put()來在構建過程中填充它。 – Bohemian

+0

是的,地圖的東西確實有用(有時),但我從來沒有想過用我的代碼這東西...我想這是一個品味問題無論如何 –

相關問題