假设我们有以下代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我们创建一个对象时One,它最初被称为父类构造函数Test().但Test()私有 - 我们得到一个错误.一个很好的例子和摆脱这种情况的方法多少钱?
Col*_*ert 49
没有出路.你必须创建一个可用的(protected,public或默认)的超级构造函数能够延长test.
这种表示法通常用在实用程序类或单例中,您不希望用户通过扩展它并实例化子类,或者只是调用类的构造函数来创建自己的类实例.
如果class只有private构造函数,则还可以更改classto,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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41025 次 |
| 最近记录: |