假设我们有以下代码:
class Test { private Test() { System.out.println("test"); } } public class One extends Test { One() { System.out.println("One"); } public static void main(String args[]) { new One(); } }
当我们创建一个对象时One,该对象最初称为父类构造函数Test()。但是就像Test()私人的一样- 我们收到一个错误。一个好的例子和解决这个问题的方法是多少?
One
Test()
没有出路。你必须创建一个可用的(protected,public或默认)的超级构造函数能够延长test。
protected
public
test
这种表示法通常用于实用程序类或单例中,在这种情况下,您不希望用户通过扩展实例和实例化子类,或者只是通过调用类的构造函数来自己创建类的实例。
当您只有一个class具有private构造函数的时,您也可以将更class改为,final因为它根本无法扩展。
class
private
final
另一个解决方案是使用一种方法,在test其中创建的实例test并将每个方法调用委托One给test实例。这样,您不必扩展test。
class Test { private Test() { System.out.println("test"); } public static Test getInstance(){ return new Test(); } public void methodA(){ //Some kind of implementation } } public class One { private final Test test; One() { System.out.println("One"); test = Test.getInstance(); } public void methodA(){ test.methodA(); } public static void main(String args[]) { new One(); } }