栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中使用接口类型引用对象的灵活性体现在哪?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中使用接口类型引用对象的灵活性体现在哪?

//定义一个接口,表示与数据库交互的规范
public interface UserDao{
    
    public User queryByUserName(String username);


    public int saveUser(User user);
}

//用一个类来实现
public class userDaoImpl implements userDao(){

    @Override
    public User queryByUserName(String username){
        return null;   //这里面写自己具体的实现方法
    };

    
    @Override
    public int saveUser(User user){
        return -1;
    };
    
}

在对userDaoImpl进行实例化时:

UserDao userDao = new UserDaoImpl();

而不是:

UserDaoImpl userDaoImpl = new UserDaoImpl();

 在网上查阅资料,很多人都解释了使用接口类型来引用对象的情况,即在什么情况下使用接口类型,在什么情况下使用类类型,但是为什么要这样做,很多都是说到这样做会更灵活,方便后期维护,对于没有开发经验的人其实很难体会到这里“灵活”指的是什么,在这里使用一个栗子来稍微形象的解释一下(个人理解):

现在有一段代码:

//使用接口类型来引用对象
void queryUserByName() {
        UserDao userDao = new UserDaoImpl1();
        String name = userDao.queryUserByName("admin");
        System.out.println(name);
        
    }

//使用类类型来引用对象
void queryUserByName() {
        UserDaoImpl1 userDaoImpl1 = new UserDaoImpl1();
        String name = userDaoImpl1.queryUserByName("admin");
        System.out.println(name);
        
    }

 现在UserDaoImpl1中的方法被废弃了,或者说这个类我觉得写的太烂了,但我又懒得改我想写一个新的类UserDaoImpl2,这个时候只需要在上面的代码块1中将new UserDaoImpl1()更改为     new UserDaoImpl2()即可,至于前面的接收类型一直是UserDao,那么后面不管是什么类,只要它实现了UserDao定义的规范就可以。而如果使用第二个代码块,意味着你要么只能去更改原来的类UserDaoImpl1,要么重新写一个实现类UserDaoImpl2,相应的引用部分变成:

UserDaoImpl2 userDaoImpl2 = new UserDaoImpl2();

这样虽然也能实现,但是于Java多态的思想相违背。Java这样设计的初衷是让接收对象减少对某个类的依赖,在本例中就是减少userDao的实例对于UserDaoImpl1类的依赖。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号