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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 whs_nk 于 2013-4-8 21:54 编辑

视频看了二十几天,在这些视频中总是听到老师们说尽量面向父类或接口编程,比如说Collection<String> collection=new ArrayList<String>();和ArrayList <String> collection=new ArrayList<String>();以及Person p = new Student();和Student s = new Student();这两种方法的区别在哪里呢?哪位大侠能举个具体的例子给我讲讲这个大白话似的问题哦?谢谢了。。。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 王梦南 于 2013-4-8 15:26 编辑

    面向接口编程的最大特点就是便于修改。比如你说的Person p = new Student();和Student s = new Student();如果你用的是后者,代码里面调用的都是Student类的特有方法。如果需求改变,让你把Student换成另外的类型,只能修改源码。而如果你要是用的前者,只要把后面的对象创建成一个新的子类只要继承Person类就可以了。无需修改已经写好的代码,提高了扩展性。
    而且,之后要学习的ssh都是基于接口和baseDao等编程的。还有很多是读取配置文件加载类的,如果你只使用后者,根本没有扩展性可言。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

Collection<String> collection=new ArrayList<String>();
这个对象可以限定后面使用的方法都是Collection中的方法,如果以后将ArrayList改成LinkedList时,程序也不会出现找不方法的可能。
我感觉最大的好处就是提高了扩展性吧, 比如

import java.util.Collection;

public class Test2 {
       
        public void getInstance() throws Exception
        {
                //用反射获取对象时
               
                Collection collection=(Collection)Class.forName("读取配置文件获取名").newInstance();
                print(collection);
        }
       
        public void print(Collection coll)
        {
                for(Object obj:coll)
                        System.out.println(obj);
        }

}

我也是刚学,也不是怎么理解。请高手详解

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
面向父类和接口的编程,在实际应用中,是用来方便功能扩展和便于代码的管理的.

比如你说的Person类,这个是父类,student是子类,同时还可以有其他的子类,比如,teacher类.
这样,你在Person类里面,只需要一个getInstance方法去获取实例里面,你可以这样写

public class Person {

        public static final int TYPE = 0;

        public static Person getInstance() {
                Person person;
                switch (TYPE) {
                case 1:
                        person = new Student();
                        break;
                case 2:
                        person = new Teacher();
                        break;

                default:
                        break;
                }

                return person;
        }
}

这样,你可以在其他类中,去控制TYPE类型,然后在父类中去初始化相应的实例.很容易扩展,有不懂的可以继续追问

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】哦~
回复 使用道具 举报
这是面向对象设计的基本原则,建议lz去看下
http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=8858,相信对你有很大帮助
回复 使用道具 举报
帮助很大,谢谢大家了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马