2012-12-01 55 views
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().但是这一个:java:这个方法返回什么?

public static A parse(string s) 

我应该如何解释呢?

问题2:new A(result); 这是什么 “新” 做回东西的时候? 该方法是否返回并调用私有构造函数?

+1

你为什么不试试? – hd1

+0

@ T.J.Crowder哦,其他课也在扩展B。根据BNF工厂方法的定义A:= C | D – hibc

回答

5

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

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

所以,你必须有在A什么是不能以正常的方式进行实例化(因为构造函数是私有)的一类,但是从中可以通过调用A.parse得到实例。在这种情况下,parse通常被称为“工厂”方法。

+0

非常感谢你!所以一个parse()只是一个创建A的对象的方法? – hibc

+0

@hibc:它创建'A'实例,是(通过调用私有构造函数)。 –

2

这不是一个构造函数。这是一种静态方法。而它的返回类型为A,那么它将返回A.

return new A(result); 

相当于

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

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

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

+0

非常感谢! – hibc