在多级继承的情况下,如何编写一个类将对象创建限制为一次?

Praghati Sukhija:

假设我们有三个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不使用单例的情况下将类限制为一个实例?

如何在不使用计算的 observables 的情况下将 observable 数组上的 Knockout foreach 一次限制为 5 个?

创建一个对象数组,然后在不丢失它们的类的情况下获取对象

如何在不使用“朋友”的情况下允许另一个人创建一个类,但允许继承?

如何一次将一个Jquery效果限制为一项?

在不不断创建新对象的情况下,如何在php中从另一个类调用一个类?

如何将选中的复选框一次限制为一个?

如何在不互相引用的情况下将对象复制到另一个对象?

在节点类被另一个类继承的情况下遍历树

如何在不使用Intent的情况下将对象从一个活动传递到另一个活动

将对象属性限制为另一个对象的属性

如何在不使用结构修改原始对象的情况下将对象存储在另一个对象中?

一次仅在一个子记录中将位域限制为真

如何在没有调用对象的情况下使用在另一个类中定义的方法?

我如何在没有类对象的情况下使用json序列化一个int值?

如何在没有并行负担的情况下使用Java reduce来简单地将对象简化为一个对象?

如何在不使用 Javascript 或 jQuery 添加属性的情况下将对象的属性复制到另一个对象中?

我如何在不创建另一个bean id的情况下访问类的相同实例

实例化一个非静态类以在没有继承的情况下跨其他类使用

如何在不一次又一次地在cmd上编写命令的情况下运行python脚本

为什么hashCode()方法在迭代的情况下,通过一个桶乘法值调用一次?

如何在不使用继承的情况下将2个不相关的类合并为一个类型

在什么情况下可以在一个类的方法在另一个对象上调用?

如何创建一个一次性类

如何在不删除前一个对象的情况下插入新对象

如何创建在模块内部并继承了另一个类的类的对象?

默认情况下,.NET类继承对象类。如何?

如何为所有方法一次创建一个对象?

如何一次创建一个对象并在Controller中多次使用它