A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zcbyzcb 中级黑马   /  2013-5-15 13:25  /  1346 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zcbyzcb 于 2013-5-20 13:14 编辑

当一个抽象类中不定义抽象方法时,这个抽象类主要不能创建对象,而单例模式实现的第一步是吧构造函数私有化,这样该类也不能创建对象,好类似啊,感觉冥冥之中两者在真正使用的时候会有很多相似的场景,你怎么看呢?

评分

参与人数 1黑马币 +1 收起 理由
Sword + 1 大胆的猜想,值得鼓励

查看全部评分

5 个回复

倒序浏览
w ganj ni zai guans
我感觉你在灌水!
抽象类不一定非要有抽象方法, 抽象类是不能创建对象的,这是规定
抽象类的子类一定要重写抽象类中的抽象方法,否则会报错,重写后可以创建子类的对象,
当然创建子类对象是可以被抽象父类引用 也就是//    抽象父类 xxx = new 子类();
其实我也感觉我在灌水.

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
抽象类不可以创建对象,所以不可能有对象的存在。而单例会在内部创建对象,并提供方法返回该对象,可以有实实在在的实例存在。
回复 使用道具 举报
楼主想法有点天马行空,但没抓住本质,实际上就是理解不透彻的表现。
回复 使用道具 举报
两者相差还是很远的。
先解释
1.抽象类,为什么叫抽象就是因为他没有具体的实体,
从现实生活中来讲就是它不具体体现一个实实在的东西。它能做的只是体现一组有共同特性的东西。比如水果。但是具体水果是什么样你必须要给他实现外形,味道等这些特性。这样才能形成一个真正的水果。所以抽象类绝对不能有实体的存在,如果你非要把水果做一个对象出来,那你还分的清楚这个水果到底是苹果还是香蕉吗。
从编程角度来看。抽象类它是可以包括没有代码实体的函数的(或是叫方法)一个没有代码的函数能执行吗?好吧就算它执行你觉得他的意义吗。所以有可能包含没有代码实体的函数的类就不能有实体,当然你或许会说,抽象类没有抽象方法不就所有函数都有代码实体了。我可以这么告诉你。在C++里抽象类被称做虚基类,抽象方法叫做纯虚函数,任何包含有一种纯虚函数的类都叫虚基类,虚基类不可以有对象。而JAVA为了避免程序员学习和使用时的繁琐性问题,直接将虚基类规定为抽象类。也就是说不管你有没有纯虚函数,只要你是虚基类,那么你就不可以有对象。换句话说,只要你不是虚基类那么你就绝对不可以有纯虚函数。能明白吧?举例:有成年pian的电影院就是成年人电影院小孩不能看,在JAVA中分了两个电影院,一个是成年人的一个是普通的,是小孩就不能进成Ren院,是抽象类 就不能有对象一样一样滴。

2.再说单例设计模式。单例设计模式的类和普通类没任何区别。唯一的不同点并不是类本身,而是设计人员的使用。你可以把任何一个类设计成单例也可以把任何单例改为普通类。这完全取决于程序员,并不在于类本身。而单例名词的出现是为了应对一些实际编程开发中遇到的问题。你可以把单例模式理解为早期C语言的过程化编程,反正就一个对象,我根本不须要设计类,就直接写一个函数把这个类的功能封装就行了。但JAVA不是提倡万物对象吗,所以将这个过程化方式抽取出来形成一个类封装,但又不希望这个内的数据有多个不同的值,所以就有了单例的出现。希望对你有所帮助,以上都是我个人学习中理解的,有不足之处还望高手不吝赐教

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1 注意排版。

查看全部评分

回复 使用道具 举报
单利模式是可以通过反射,创建实例对象的。但是抽象类不行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马