接口 :
public interface UserService {
// 注册
public void regist();
}
实现类:
public class UserServiceImpl implements UserService {
@Override
public void regist() {
System.out.println("区别");
}
}
main(){
UserService userService = new UserServiceImpl();
userService.regist();
}
问题
为什么main 函数中 构造对象的时候 是:
1) UserService userService = new UserServiceImpl(); 而不是
UserServiceImpl() userService = new UserServiceImpl();
接口的设计主要还是为了实现多态的。
你这里觉得没区别是因为你只有一个UserServiceImpl实现类。
假设我们还有类A,B,C,他们都具有共同的行为regist。
假设我们还有个方法
//us.regist();
}
当然如果不用interface,那么你可能要定义4个方法来应对我们不同的对象了
void do(UserServiceImpl us){//us.regist();
}
void do(A us){
//us.regist();
}
...
尽管他们方法体一样,要做的事一样。可是如果没有interface,我们还是要乖乖的这样做。
当然抽象类也可以这么用,但是因为一个类只能继承一个类,如果把抽象类拿来当接口用,那多态就是笑话了。