当前位置:编程学习 > JAVA >>

jdk预读及通过实现接口的子类实例化接口

首先,请先看一个简单的例子:

原来我对JAVA接口的用法:

interface A{

public abstract void b();

}
//B类执行A接口并实现抽象方法b()
public calss B implements A{

public void b(){

System.out.println("called";

}
//C类进行方法调用

pubic class C{

public C(){}

public call(){

public A a1 = new B();

a1.b();
}

//省略main方法, new C.call();
}
代码大致是这种思想,也就是,用具体实现抽象方法的类来实例化接口类

而最近我发现这种形式的代码,却怎么也写不出来

List UserVOL = session.find(....)
Iterator it = UserVOL.iterator();
if(it.hasNext()){
//省略
}
上面的代码很简单,也就是hibernate当中的find()方法返回一个List对象,然后再用Iterator 实例化它并释放

那么,进入正题:
我查阅了List 类 和 Iterator类,两个类均为接口,也就是说:UserVOL.iterator();,it.hasNext();均调用的是抽像方法.

然后,按照我第一个例子的思想...有了接口类...我就要用实现这个接口类的子类来实例化接口类....
也就是开始的,用B实例化A.....

那么,有谁能够按照JDK当中那种设计接口的思想,将第一个例子改一改呢....也就是真正实现,只知道有接口类,而不让用户看到具体实现的类...、
解答:
每个接口reference持有的都是一个具体实现该接口的对象,所有你的list肯定引用的是ArrayList或LinkedList,然后再往上不就找到了AbstractList?
 
UserVOL.iterator();
其实这句返回的就是一个实现了Iterator接口的实现类,然后用接口的reference来操作,实现了所谓的封装,你可以顺着List的源码一直找上去,看看其实现,我的顺序是这样的:List---ArrayList--AbstractList--iterator()--最终找到了Itr,该内隐类就是那个实现。

作者“小猫”

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,