抽象类是100%绝对肯定不能实例化的.Set是抽象的,但你可以用下例:
Set set = new HashSet();
不知你能否得到一点启发.
Set set = new HashSet();
不知你能否得到一点启发.
解决方案 »
- java键盘监听器的小问题
- JTable 插入行 出现 AWT-EventQueue-0 java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
- 如何获得Jtree中某个节点的路径?
- JAVA动态LoadClass问题
- 在ORACLE中存储过程中如何调用java程序?
- ServerSocket
- 请问JTABLE在APPLET里可以正常显示吗?
- 一个初学者的问题
- 在异常处理中,如果把一句绝对不会抛出异常的语句用try{}catch(){},会用什么反映?进来看看这个例子
- ======再问一个问题!大家一起来给点意见!见者有分!
- 关于new java.awt.event.ActionListener()的问题
- [请教]关于一个Dialog的小问题
有个依赖倒转原则听说过吗?
它说的是:要依赖抽象,不要依赖于具体/
你随便注意一下,就可以看到/
就像helpall说的一样
Set set = new HashSet();
Collection col=new ArrayList();
-->为什么要这样呢?因为这样更通用了/我可以很容易把col变成Vector,变成List
包括你提到的Image等/
还有个重要概念:变量有静态类型和真实类型.
上面的set的静态类型是Set,真实类型是HashSet.
可以被实例化的是抽象类的某个具体子类。
子类对象被向上转型(upcast)为父类的类型。
所以看上去像是有了一个实例化的父类对象。
//
JBuilder里却可以随便使用象Image,Graphics等等的abstract类
事先已经用他的子类实例化了
//
不过还是有点不明白,既然用它的子类实例化,那么:
Image img=new java.awt.Toolkit.getDefaultToolkit().createImage("pic.jpg");
语句中img是Image的哪个子类的对象呢?
这个子类很有可能是一个内隐类(inner class),甚至有可能是一个匿名类,你都无从知道其具体类型,只知道他继承或实现了抽象类或接口。
java有一套运行时类型检查系统(RTTI:RunTime Type Identification),你不用操心这个问题。
但没说子类不能向父类转换啊
谢谢你的解答. 有时候真觉得就象物理中的测不准定理一样,你越要搞得很清楚,反而会越糊涂. 进入一个森林(java)中,如果仔细研究每棵树(class),反而不知道森林长得是什么样了,当然,如果一棵树都不知道,说是精通森林,也是不可能的.关键是掌握这个度, 难啊!
“java说abstract类是不能实例化的,可是JBuilder里却可以随便使用象Image,Graphics等等的abstract类。而我从Image继承一个类,还保持抽象类,就不能实例化。为什么呢?
”
你自己都承认了继承来的这个类还是个抽象类,既然是个抽象类,你怎么可以去实例化它呢。如前面极为仁兄说的,要想实例化它,就先它不再是抽象类。
可以参考:
http://expert.csdn.net/Expert/topic/1834/1834814.xml?temp=.1347162关键字:对象替换,对象工厂
Set是动物,HashSet是你,动物是抽象的,你是实例化过的动物,就是人,人是动物的子类,
所以可以这个等式是成立的。