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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯鹏飞 黑马帝   /  2011-7-21 08:57  /  2812 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

遇到过很多面象接口编程实例代码,变量的类型尽量使用面向父级,就如List  l=new  ArrayList()这种方式,我现在困惑的是到底是其优点在哪?具体怎么应用的?如果能有实例最好。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 马友们在下面告诉他

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-7-21 10:29:16
沙发
马友来了
马友,海涵来帮你解答这个问题,希望对你有帮助
List l=new ArrayList()这种方式是父类的引用指向子类,是多态性
比ArrayList l=new ArrayList() 更具有灵活性
因为父类的外延更大。
回复 使用道具 举报
黑马网友  发表于 2011-7-21 10:31:01
藤椅

回复 楼主 的帖子

还有 张老师 说过

List l=new ArrayList()这么写
比ArrayList l=new ArrayList() 这么写  
显得你更专业,面试你的人 会觉得你这个人 更高。
回复 使用道具 举报
黑马网友  发表于 2011-7-21 10:49:54
板凳
将变量声明为父类是为了让代码有更好的可扩展性,因为一个项目未来可能会应对不同客户的需求进行不同的修改,这时候便需要继承这个类或是方法或是实现接口,如果这是你需要继承这个类,那么有可能还需要更改父类的代码,会增加更大的工作量,而且也降低了代码的安全性。
回复 使用道具 举报
List  l=new  ArrayList()  比 Arraylist l=new ArrayList()灵活,
下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class TestCollection {
public static void main(String[] args) {
System.out.println("开始:");
String a = "A", b = "B", c = "C", d = "D", e = "E";
List<String> list = new ArrayList<String>();
list.add(a); // 索引位置为 0
list.add(b); // 索引位置为 1
list.add(c); // 索引位置为 2
list.add(d); // 索引位置为 3
list.add(e); // 索引位置为 4
list = list.subList(1, 3);// 利用从索引位置 1 到 3 的对象重新生成一个List集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("结束!");
}
}
输出如下信息:
B
C

主要体现了接口的使用使得方法的描述说明和方法功能的实现分开考虑,这有助于降低程序的复杂性,使程序设计灵活,便于扩充修改。这体现了java的多态性。
[ 本帖最后由 董俊霞 于 2011-07-21  11:15 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-21 15:01:01
地板
多态
接口实例化和对象实例化的区别
如果你要使用反射机制最好是用list   l   =   new   arraylist()这种形式
如果不用反射,那都是一样的
不过在实际的工程应用中最好使用list   l   =   new   arraylist()这种形式
比如你想定义dog和cat两个类,最好是先设计出一个animal接口然后用通过dog和cat实现,使用的时候也类似
list   l   =   new   arraylist(),这样会比直接dog   d   =new   dog()好的多……

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马