扩展超类的子类如何调用父类的构建器

时间:2011-06-27 13:30:07

标签: java

我有像

这样的父类
 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");

我现在如何调用构建器??

不好意思,建筑师是一个班级...我的错误。

4 个答案:

答案 0 :(得分: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();

    }
}

答案 1 :(得分:0)

如果你想从A类之外调用该方法,那么它不应该是私有的。

如果您只是希望它成为B创建过程的一部分,那么您应该执行以下操作:

class B extends A {

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

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

答案 2 :(得分:0)

由于builder(是一个类btw?还是缺少返回类型?)是静态的,你可以称之为A.builder()。为了让它可见,你不应该把它变成私人的:)

编辑:因为它是一个类,你有几种可能性:

  • 如果您需要新的实例调用new A.builder(...)
  • 如果构建器提供静态方法(在这种情况下问题就是为什么这是一个类)调用A.builder.someStaticMethod(...)

答案 3 :(得分:0)

制作ClassA的builder方法protected(而不是private),因此它们对ClassB可见,然后使用匿名类来调用它,如下所示:

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