首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

[初学Java]百思不得其解,小弟我看到一个Interface被实例化了,没出错正常运行

2013-08-04 
[初学Java]百思不得其解,我看到一个Interface被实例化了,没出错正常运行我初学java,初到不能再初的那种。新

[初学Java]百思不得其解,我看到一个Interface被实例化了,没出错正常运行
我初学java,初到不能再初的那种。
新加入公司,在java组,项目经理给我发来一份公司以前做的项目,用的公司自己的框架,让我看懂。但是有一处我真是百思不得其解啊。

在LoginBean类的login方法中有句“UserInfo userInfo = userService.getUserInfo(userId)”
在UserService类的getUserInfo方法中有“UserInfo userInfo = userInfoDao.getUserInfo(userId);”
而打开UserInfoDao.java看到的是“public interface UserInfoDao”

不是说接口是不能被实例化,只能被继承的么?接口里的方法都是虚方法“public abstract UserInfo getUserInfo(String s);”,没有具体的实现的。可是它居然确确实实的被实例化了,还调用了它的方法,并且更诡异的是,它真的能运行…怎么会呢?这个方法压根就是个尚未实现的虚方法,怎么运行。

=========================
另外顺便问一下,我很好奇,公司这个框架的src目录下的每个最里层的的子文件夹下都有“.svn、apply、dialog、manager、pos、sequence、workflow”这样的目录结构,不知是java语言的格式要求还是某个框架(struts/spring/ibatis)的格式要求或者是公司自己的要求?
附:刚注意到webContent下也有这样的目录结构……神马状况
[解决办法]
有个东西叫 多态
[解决办法]

引用:
我初学java,初到不能再初的那种。
新加入公司,在java组,项目经理给我发来一份公司以前做的项目,用的公司自己的框架,让我看懂。但是有一处我真是百思不得其解啊。

在LoginBean类的login方法中有句“UserInfo userInfo = userService.getUserInfo(userId)”
在UserService类的getUserIn……

楼主第一个问题,是面向接口编程,【userInfoDao.getUserInfo(userId)】中,userInfoDao是UserInfoDao类型,而实际上传入的肯定是UserInfoDao的实现类,因为接口不能实例化。
这样定义成UserInfoDao,比较灵活,相当于所有UserInfoDao的实现类都可以传进来使用。
我给你举个JDK的例子:


    public static void print(List<String> list) {
        if (!list.isEmpty())      // 此处的list也只是定义成接口类型,但是实际上调用的是具体的实现类
            System.out.println(list.get(0));
    }
    public static void main(String[] args) {
        
        List<String> list = new ArrayList<String>();
        list.add("HelloWhold");
        print(list);
    }


至于楼主的第二个问题,公司代码的分层是自定义的,根据不同的业务需要可以定义成不同样子,用起来方便就行。
不过一般会有几层比较类似的:
DAO层:数据库操作
Modal层:javaBean


Factory层:工厂类
util层:工具类
Service层:服务类
等等……

[解决办法]
这个是申明的用法
其实,在它的前面,userInfoDao已经被一个实现了这个接口的类赋值过来的。
然后,才能用的。这用到了多态。
[解决办法]
这个用法是多态,父类引用指向具体子类。可以去找接口的实现类

[解决办法]
里面有work flow?你们公司做的是不是工厂业务流程管理
难道是ds?
[解决办法]
多态的应用。
[解决办法]
能进公司 看来面试题背的不错了
[解决办法]
你所谓的没看见是因为它没写在你看的类里面而已

你们公司的框架基本就是仿Spring或者直接照抄Spring,加一层封装而已

Spring注入没用过?里面不全是声明一个接口的引用,注入一个实现类吗。
[解决办法]
1.可能是多态而已
2.利用动态代理生成的一个代理对象而已
[解决办法]

引用:
能进公司 看来面试题背的不错了

呵呵
[解决办法]
哈哈  呵呵 
[解决办法]
甚至于在一些*.java文件中看到调用了的类或者引入了的包,在路径下还找不到对应的*.java/*.class/*.jar文件…额,应该在哪里找呢?我都不知道阅读一个jsp站点该从何看起… 

================
要么在你们公司写的代码编译成的class里,要么在classpath所引用的jar包里。

你选个好用的工具比如Eclipse,看东西就很方便

另外C转到JavaEE开发需要换个思路,不是所有的轮子都要自己造的,有些类库你只要知道它能做什么,有哪些常用API就可以了。

热点排行