[初学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下也有这样的目录结构……神马状况
[解决办法]
有个东西叫 多态
[解决办法]
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);
}
Factory层:工厂类
util层:工具类
Service层:服务类
等等……
[解决办法]
这个是申明的用法
其实,在它的前面,userInfoDao已经被一个实现了这个接口的类赋值过来的。
然后,才能用的。这用到了多态。
[解决办法]
这个用法是多态,父类引用指向具体子类。可以去找接口的实现类
[解决办法]
里面有work flow?你们公司做的是不是工厂业务流程管理
难道是ds?
[解决办法]
多态的应用。
[解决办法]
能进公司 看来面试题背的不错了
[解决办法]
你所谓的没看见是因为它没写在你看的类里面而已
你们公司的框架基本就是仿Spring或者直接照抄Spring,加一层封装而已
Spring注入没用过?里面不全是声明一个接口的引用,注入一个实现类吗。
[解决办法]
1.可能是多态而已
2.利用动态代理生成的一个代理对象而已
[解决办法]