【问题标题】:Proper use of private constructors正确使用私有构造函数
【发布时间】:2012-05-17 17:36:05
【问题描述】:

我正在阅读有关私有构造函数的内容,并发现了一些我无法理解的点。它说,如果您将构造函数声明为私有:

  1. 该类不能从另一个类显式实例化
  2. 该类不能被继承
  3. 应该用在只包含静态实用方法的类中

我的第一个问题:2 说类不能被继承。好吧,如果你声明一个私有类,那么它仍然会满足这个属性。是不是因为,如果一个类是私有的,它仍然可以被另一个类从外部显式实例化?

我的第二个问题:我不明白3 的观点。如果我有一个充满静态方法的辅助类,我将永远不必实例化该类来使用这些方法。那么,你永远不会实例化的类中的构造函数的目的是什么?

【问题讨论】:

    标签: oop constructor private-members


    【解决方案1】:

    Java 的答案

    问题 1 您将私有类与具有私有构造函数的类混淆了。私有构造函数主要用于不打算实例化的静态类(即它们只有一堆静态方法)。

    问题 2 完全不需要构造函数,因此您必须显式创建一个私有构造函数,这样它就不会获得 JVM 将提供的默认构造函数(如果没有定义)

    一个没有定义方法的空类在默认情况下总是会被 JVM 赋予一个无参数的构造函数

    【讨论】:

    • 具有 only 私有构造函数且没有调用它们的私有成员的类实际上是静态类,但完全有可能拥有仅通过工厂方法创建实例的类, 并且可能有具有多个公共或受保护构造函数的类,这些构造函数链接到一个公共私有构造函数,该构造函数执行所有公共构造函数所共有的那部分构造。
    【解决方案2】:

    我以 为例(不是已知的最好的面向对象语言,但非常流行)-因为您没有定义您的意思是哪种语言。

    广告 2。在这些语言中,您必须显式调用超类构造函数,或者为您隐式调用它。从子类中你不能调用私有方法(只有公共和受保护的)——这条规则也适用于构造函数。这意味着如果类只有私有构造函数,则无法在子类构造函数中调用一个。所以你不能继承这样的类。

    广告。 3. 只是为了避免混淆——因为这个类只是实用方法的容器,实例化它没有意义。这样您就可以在编译时强制执行此规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      相关资源
      最近更新 更多