相对来说,有一个简单的继承层次结构,比如ISomeInterface接口,还有一些继承自它的类,比如MyClass。创建对象时,我可以进行以下输入:
ISomeInterface test = new MyClass();
问题是,为什么要这样做?我会从这样的演员阵容中得到什么好处?必须与例如以下创建对象的方式有所不同:
MyClass test = new MyClass();
我看到很多例子,其中一个接口变量被分配给一个继承这个接口的类的对象(通常它与泛型集合相关联),但直到现在我才意识到我不明白为什么我们在这个中构建代码方法。
通常他们会说,这种写法可以让你清楚地表明你不受接口的特定实现的束缚,你可以随时改变它……不要相信。无论如何,在适合您的任何时候更改实现都是没有意义的。
在大多数情况下,声明变量的正确方法是产生最少视觉垃圾的方法,即:
但是,在某些情况下,显式指定变量的类型很重要。
首先,由于某种原因,您需要的接口方法可能在类中有显式实现,并且没有公共对应方法。在这种情况下,您别无选择,只能使用该界面:
其次,当一个类有多个接口,而某个方法有多个重载时,这种情况是可能的。在这种情况下,如果不显式指定接口,编译器将无法选择适当的重载:
第三,有时您需要稍后将其他内容分配给变量:
第四,当使用自顶向下编程时,您可以要求 IDE 存根尚不存在的方法。在这种情况下,IDE 根据变量的类型来确定参数的类型:
好吧,作为方法的参数,当然需要使用接口(毕竟ISomeInterface接口是为了什么而发明的?)