黑马程序员技术交流社区

标题: 一个关于private构造函数的小困惑 [打印本页]

作者: 张正强    时间: 2013-3-31 09:25
标题: 一个关于private构造函数的小困惑
本帖最后由 张正强 于 2013-3-31 20:25 编辑

“当类T只声明了私有实例构造函数时,则在T的程序外部不可以从T派生出新的类,也比可以直接创建T的任何实例”这句话是不是说如果T类申明的时候是public,但是仅有一个private构造函数时,这个类其实是private的呢???
作者: 邵震    时间: 2013-3-31 09:35
以下的话是我从网上找到的  看看能不能帮到你 我现在也在纠结面向对象这一块

当类 T 只声明了私有实例构造函数时,则在 T 的程序文本外部,既不可能从 T 派生出新的类,也不可能直接创建 T 的任何实例。因此,如果欲设计一个类,它只包含静态成员而且有意使它不能被实例化,则只需给它添加一个空的私有实例构造函数,即可达到目的。例如:
public class Trig
{
   private Trig() {}      // Prevent instantiation
   public const double PI = 3.14159265358979323846;
   public static double Sin(double x) {...}
   public static double Cos(double x) {...}
   public static double Tan(double x) {...}
}
Trig 类用于将相关的方法和常数组合在一起,但是它不能被实例化。因此它声明了单个空的私有实例构造函数。若要取消默认构造函数的自动生成,必须至少声明一个实例构造函数。
作者: 刘胜寒    时间: 2013-3-31 09:47
不是的.
public修饰类是声明,类是公有的,是可以被访问的。
一个公有的类,内部只有一个private修饰的构造函数,只是说明这个类不能被实例化。

作者: 张正强    时间: 2013-3-31 09:58
像这种不能被实例化的类,又不能像static类一样直接调用,那要他有什么用?如果用到,会在什么时候会用到?
作者: guobin_lu    时间: 2013-3-31 10:03
共享一个实例的时候吧
作者: 张正强    时间: 2013-3-31 10:14
张正强 发表于 2013-3-31 09:58
像这种不能被实例化的类,又不能像static类一样直接调用,那要他有什么用?如果用到,会在什么时候会用到? ...

我理解错了,它是可以从外部直接调用类里的静态成员,回复之前就应该先敲一下代码的,汗!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2