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类的依赖。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值