ICustomer customer = new Customer();
这样写,你只能把Customer当做ICustomer服务的提供者,那么你只能使用ICustomer声明的服务。
Customer customer = new Customer();
这样写,那么你就能使用Customer类中所有的公开服务,此时你把它当做Customer来用。
区别其实没啥,这两种写法都行,不存在什么设计、重用、面向接口之类的东西,这些东西是在设计结构时候定的,跟这里如何实例化一个类没有什么关系。比如你声明了一个ArrayList list = new ArrayList();你照样能把这个对象引用丢给参数列表类型为List的方法。