假设我们有三个A,B和C类
class A{
A(){
System.out.println("A");
}
}
class B extends A{
B(){
//super
System.out.println("B");
}
}
class C extends B{
C(){
//super
System.out.println("C");
}
}
public class Main{
public static void main(String[] args){
C c = new C(); // This will print ABC and that is fine
C c' = new C(); // Should not be allowed
}
}
我想提出一些逻辑,以便在创建c之后不应允许C c'= new C()。任何建议将不胜感激。在面试中有人问我这个问题,面试官暗示说“超级可以做点什么”。但是我没有回答。
看起来您想要单例模式。
class C extends B {
private static class SingletonHolder {
static final C SINGLETON = new C();
}
private C() {
super();
System.out.print("C");
}
public static C getInstance() {
return SingletonHolder.SINGLETON;
}
}
这样,它将ABC
在第一次getInstance
调用时仅打印一次,因为SingletonHolder
只有在调用时才会加载getInstance
。
然后,您可以像这样使用它:
C c = C.getInstance();
如果您想要运行时异常,则可以保留一个静态布尔值字段,以C
告知C
构造函数是否已被调用,并在有人尝试再次实例化该异常时抛出异常。但是,我怀疑那是面试官想要的东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句