补充一点哈,saveDAO里的save方法用Serializable接口作参数,就是为了saveDAO的通用性.让他可以保存任何一个POJO(只要实现了Serializable接口的pojo)

解决方案 »

  1.   

    JAVA中的多态  既然你传入的是User 类 只会调用子类User的方法如果你User是个JavaBean的话 就会调用get()函数, 不会调用接口也就是Serializable中的方法 况且Serializable也没有get()方法。不知道 能不能认为Serializable是个标记接口。
      

  2.   

    楼上的楼上,
    接口变量只能调用在接口中声明过的方法,getXXX()并没在Serializable接口中声明,请问Serializable变量怎么调得倒user对象中的getXXX()方法.
      

  3.   

    给你个简单点的代码 执行下就知道了 这是JAVA典型的多态特性
    public interface A {

    }public class B implements A {
    String name ;

    public B(String name){
    this.name=name;
    }

    public void setName(String name){
    this.name=name;
    }

    public String getName(){
    return this.name;
    }
    }public class C {

    public String getName(A b){
    return ((B) b).getName();
    }
    }
    public class Test {
    public static void main(String[] args){
    B b = new B("zhangsan ");
    C c = new C();
    String name = c.getName(b);
    System.out.print(name);
    }
    }
    你分别建ABC三个类 用test测试下接口A中并没有get方法哦
      

  4.   

    关键是 是C中getName方法 你体会下吧
      

  5.   

    很感谢楼上的大哥.C中的B(b)把b接口所指的对象转换成了B类型.但你还得先导入B类啊.你的C类相当于我的程序中的saveDAO......但我不可能在saveDAO.save()方法中先导入对象user啊(实际上也没有),是吧.但saveDAO.save(Serializable xx)是通用的.只要调用saveDAO.save(xxx)传入一个对象user.也就是说你的C类其实并不通用,因为要先导入B类.
      

  6.   

    再举个简单点的例子  比如  有个动物的接口      我有个看动物的方法参数为动物 watchAnimal(Animal animal) 这个方法应该是通用的 我看狗看猫都可以 因为猫狗之类的都是动物也就是实现了动物这个接口  现在 我看猫了 那就watchAnimal(Cat cat)  我想看猫抓老鼠 那就在看猫这个方法里调用cat. snapMouse(Mouse mouse) 猫抓老鼠跟动物这个接口没关系吧 不一定猫会抓 其他的动物也要会抓老鼠吧 我要看狗了 那就watchDog(Dog dog)我要看狗抓猫那就在看狗的方法里调用dog.snapCat(Cat cat) 同上道理  那 现在 我 现在相当于你的那个saveDao 看动物的方法相当于saveDao的save方法  Serializable相当于Animal  User相当于 猫啊 或者狗啊 之类的动物 只要是动物都行  
    User的get方法相当于猫的抓老鼠方法  或者狗的狗抓老鼠的方法  子类继承或者实现一个类 只是把父类的方法继承下来护着实现了接口的方法 子类自己可以有自己的独特的方法啊 不一定要跟父类或者接口一抹一样。  大哥 好好体会多态的用法
      

  7.   

    经过多次试验,发现每个接口变量有一个方法:getClass()
    在我的程序中,虽然是传User对象user给Serializable变量u;但用u.getClass()即可运行时得倒对象user;u.getClass()还可有其它很多方法,如getMethods等取得user中的方法了.很感谢上面这位大哥.........