扩展超类的子类如何调用父类的生成器



我有一个类似的父类

 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");

我现在怎么能打电话给建设者。。?

对不起,伙计们,建设者是一个阶级。。。我的错误。

如果我完全理解你想说的话,你会遇到以下情况:

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();
    }
}

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

如果你只是想让它成为B创建过程的一部分,那么你应该这样做:

class B extends A {
  public B() {
    super(); // invokes A's constructor
  }
}
class A {
  public A(){
    // use builder() here
  }
}

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

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

由于builder(这是一个类btw?还是缺少返回类型?)是静态的,所以您可以像A.builder()一样调用它。为了使其可见,您不应该将其设为私有:)

编辑:由于它是一个类,您有几种可能性:

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

最新更新