就 private UserDAO = new UserDAOImpl()而言,因为UserDAO是个接口,它不能直接实例化,而是UserDAOImpl是个类,它可以实例化,至于为什么用UserDAOImpl实例化UserDAO?因为UserDAOImpl实现了这个接口,父类的对象可以引用子类的对象即对象上转。
可能你觉得这样很麻烦吗,直接用实现类不就行了吗,即不用接口,实例化的时候也方便,随着你的深入学习,到了一定层次后,你就会有很深的关于面向接口编程的体会。
你的意思是不是为什么不直接来个UserDAOImpl,而非要加个UserDAO 接口?
这样好处是可以屏蔽实现层,比如你现在用hibernate实现dao,后来改用ibatis,那么只要替换impl的类就可以,而不用改动其他。
另外一个是,dao接口属于M层,它不应该知道如何去实现数据的持久
以上仅是我个人看法,不对的地方欢迎指教。
一般有个UserDao接口,一个实现类。就是面向接口编程。