duf*_*ymo 16
只有一个可能的纠正:
要使用接口,可以简单地在具体类的实例上调用方法.
可以在类型接口的引用上调用方法,这恰好使用具体类作为实现:
List<String> l = new ArrayList<String>();
l.add("foo");
l.add("bar");
Run Code Online (Sandbox Code Playgroud)
如果您决定切换到另一个List实现,则客户端代码无需更改即可运行:
List<String> l = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
这对隐藏实现细节,自动生成代理等特别有用.
你会发现像spring和guice这样的框架鼓励对界面进行编程.它是面向方面编程,自动生成的事务管理代理等思想的基础.
你的理解似乎正确.你的同事只是摆在你的办公桌旁,并把你喝醉了的老板主演的圣诞派对的所有最新照片装到他的拇指驱动器上.你的同事和你没有想过这个拇指驱动器是如何工作的,对你来说它是一个黑盒子,但你知道它因USB接口而起作用.
无论是SanDisk还是Titanium(甚至不确定是一个品牌)都没关系,尺寸/颜色也无关紧要.事实上,唯一重要的是它没有被破坏(可读)并且它插入USB.
你的USB拇指驱动器遵守合同,它本质上是一个接口.人们可以认为它履行了一些非常基本的职责:
遵守合同方法CopyDataTo:
public Interface IUSB {void CopyDataTo(string somePath); //用于将数据从缩略图驱动器复制到...}
遵守合同方法CopyDataFrom:
public Interface IUSB {void CopyDataFrom(); //用于将数据从PC复制到缩略图驱动器}
好吧,也许不是那些方法,但IUSB接口只是缩略图驱动器供应商必须遵守的合同,以确保跨各种平台/供应商的功能.所以SanDisk通过界面制作了他们的拇指驱动器:
public class SanDiskUSB : IUSB
{
//todo: define methods of the interface here
}
Run Code Online (Sandbox Code Playgroud)
Ari,我认为你已经对接口的工作方式有了深刻的理解(听起来是什么样的).