UserService service = new UserServiceImpl();与UserServiceImpl service = new UserServiceImpl();有何区别呢? 问题二者谁更好呢UserService service new UserServiceImpl(); UserServiceImpl service new UserServiceImpl();注UserService是接口类UserServiceImpl()是实现类推荐UserService service new UserServiceImpl();原理当我们使用该中写法时我们调用service中的方法时只能调用UserService接口类中声明的方法不能去调用UserServiceImpl()实现类扩展的方法例public interface UserService { void addUser(); }public class UserServiceImpl implements UserService { Override public void addUser() { System.out.println(添加用户); } public void test() { System.out.println(测试方法); } }情况一UserServiceImpl service new UserServiceImpl(); service.addUser(); service.test();两个方法都能正常运行因为编译器知道service是UserServiceImpl类型其中有test()方法情况二UserService service new UserServiceImpl(); service.addUser(); service.test(); // 编译报错test()方法报错因为此时service是UserService类型没有声明test()方法原因当使用推荐的写法时我们也就实现了接口编程的核心价值暴露最少能力隐藏实现细节降低耦合例如目前我们使用UserService service new UserServiceImpl();后续修改为UserService service new UserServiceRedisImpl();但是我们仍然只使用UserService中声明的方法而不去关注底层究竟是Mysql还是Redis本质就是让我们去依赖接口的“能力”而不是具体的实现。这样我们就实现了上述接口编程的核心价值。