“为什么最下面的SingleDemo类中,不可以将SingleDemo类的对象实例化”
这句话本身就是个问题,你现在需要一个对象s1 是个引用类型数据,类型为Single,怎么能把它的类型 声明为SingleDemo,这个问题可比喻为:你需要 int类型数据5,你应该写为int i=5; 但你写成了 char i=5;
表面是单例设计模式看不懂,真正问题是你没有把类,对象还有构造函数概念弄明白
第一个类:对一些对象的描述,抽象,概括;
包括三部分:第一部分 属性
第二部分 构造函数(如果类中没有写,那 么默认的是无参构造 ),用来实例化对象时
调用 即你的问题 new对象时调用,
注意: 构造函数名和类名一致
第三部分 普通函数 提供一些功能
实例化对象格式: 类 对象= new 构造函数()
因为构造函数名和类名一致,所以在没有多态的情况下 可以这样理解 类 对象 = new 类名()
有了多态 可能格式 类(或该类的父类) 对象=new 子类构造函数()
所以实例化时 等号前面的类名是构造函数所在的类 或 所在类的父类
等号前的类 和 等号后的构造函数所在类 必须是有关系的,本类或父类
如果第一个类的构造函数 private Single(){} 没有私有化 即 public Single(){}
那么实例化对象 Single s1 = new Single();
但是现在私有化了 private,那么外部类不能访问,即SingleDemo类中没有权限访问构造函数,那么就不能实例化了,怎么办,只能在原类中实例化,但是原类中的对象也是私有的,不能访问,为了能取到对象,所以原类中写了个静态方法(这里涉及到了静态方法访问,静态方法不需要类的实例化就可以访问,格式为:类名.方法名()),这个静态方法返回值为s,类型为 Single,即 s1= Single.getInstance;这个s1是Single类型的 |