说穿了还是接口的问题
就是不知道接口的运行机制
1。比如实现了Serializable接口,就能序列化了吧,但是这个接口是标识接口,里面没有任何方法和属性,那在自己的类实现了这个接口,java是怎么让它实现序列化的呢
2。在Hibernate中
常用的接口Query,例如:
Query query = hbtSession.createQuery("................");
vos = query.list();
htbSession也是一个接口,并没有实现createQuery这个方法,但是query.list()就能取出结果集了,这又是怎么回事呢。
问题困扰了我很久,麻烦大侠么帮我解决,不胜感激。
就是不知道接口的运行机制
1。比如实现了Serializable接口,就能序列化了吧,但是这个接口是标识接口,里面没有任何方法和属性,那在自己的类实现了这个接口,java是怎么让它实现序列化的呢
2。在Hibernate中
常用的接口Query,例如:
Query query = hbtSession.createQuery("................");
vos = query.list();
htbSession也是一个接口,并没有实现createQuery这个方法,但是query.list()就能取出结果集了,这又是怎么回事呢。
问题困扰了我很久,麻烦大侠么帮我解决,不胜感激。
关于这个可以去看看动态编连
显示的:List list = new ArrayList();
隐式的:如第二个问题中Hibernate中的session,是由SessionContext指明实现类的,而SessionContext本身又是接口,它是由容器在运行时提供实现的。
呵呵,就知道这么多,看看别人的答案吧。
http://anniekim.bokee.com/3927765.htmlhttp://xn--94qz7fc65e.com/qfc/76151.html
至于第二个问题,我是这样认为的,createQuery()方法返回的一个实现了Query接口的类的一个实例,Query query = hbtSession.createQuery(),就是把query指向了一个类的实例,
然后调用 query.list()方法,因为Query是一个接口,他的实现类就必须实现list()这个方法,
所以当你调用query.ist()的时候,实际上是调用了实现类的list()方法,下面是我写的例子:
//定义一个接口
interface T{
public void method();
}//定义一类实现了接口T
class T1 implements T{
//实现了接口中的方法
public void method(){
System.out.println("t1");
} //一个静态方法,返回这个类的一个实例
public static T1 createT(){
T1 t1 = new T1();
return t1;
}
}
//就是测试类
class Test
{
public static void main(String [] args)
{
T t =T1.createT();
t.method();
}
}
输出的结果是t1
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
也就是说没有缺省构造函数的类必须实现 writeObject 和 readObject 两个方法。这两个方法的解释楼主可以自己到 JDK 去找,他们的缺省实现是这样的: private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
} private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
}如果没有特殊要求的话,象上面这样写就可以了。