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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党巾水 中级黑马   /  2012-7-3 12:42  /  1550 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘馨琪 于 2012-7-10 14:02 编辑

请问这句话是直接使用Collection接口创建了一个名为collections的对象吗?谢谢!
说明:这句话编译运行正常通过。

Collection collections = (Collection)Class.forName(className).newlnstance();

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

4 个回复

倒序浏览
此为子类为父类对象实例化
className是一个Collection接口的子类

点评

lz说的是编译阶段哦,不一定得要是实现Collection接口的类,其它的类也可以。 编译阶段是Class.forName(xx).newInstance(),编译器会认为是Obj对象引用是可强转   发表于 2012-7-3 13:15
回复 使用道具 举报
Class.forName(className).newlnstance();

这个是反射,出来后编译器默认是Object对象, 然后 (Collection) 就是强制类型转换了,等你学到反射就明白了。

点评

请问是反射出了一个实现了接口Collection的类吗?  发表于 2012-7-4 10:41
回复 使用道具 举报
这是典型的多肽应用,接口引用指向子类对象。所谓的面向接口编程。他的好处就是,此collocations 可以指向 HashSet,ArrayList 等实现了Collection接口的类的对象。
回复 使用道具 举报
个人认为,这里不存在多态问题。
lz说的是编译阶段,编译阶段是不存在多态问题的。
只有在运行阶段时,才会有多态。

当然不包括方法的重载与重写,这个也属于特例多态哦(编译阶段会认识允许你编译通过,若多方法,参数一致返回值不一致编译不通过)。多态嘛,只是一个事物多种表现形式而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马