1
public class A extends B {
    private A(B b) {
        super(b);
    }

    public static A parse(string s) // question 1
    {
        B result = D.parse(s);

        return new A(result); // question 2
    }

}

问题 1:我不明白这是什么类型的构造函数(?)。我认为常规构造函数看起来像public A().但是这个:

public static A parse(string s)

我应该如何解释它?

问题2: new A(result); 这个“新”在退货时有什么作用?此方法是否返回并调用私有构造函数?

4

2 回答 2

5

问题1:根本不是构造函数,它只是一个创建对象的静态方法。

问题2:new用于调用类的构造函数。new A(...)调用A传入参数的构造函数。

因此,您所拥有的A是一个无法以正常方式实例化的类(因为构造函数是私有的),但是您可以通过调用从中获取实例A.parseparse在这种情况下,通常称为“工厂”方法。

于 2012-12-01T08:09:54.813 回答
2

它不是构造函数。这是一种静态方法。并且它的返回类型是A,所以它返回A。

return new A(result);

相当于

A temp = new A(result);
return temp;

它调用允许创建 A 的新实例的私有构造函数,然后返回这个新实例。

你有一个典型的工厂方法。就像Integer.valueOf(String),例如。

于 2012-12-01T08:11:31.537 回答