繁体   English   中英

用具体的类实例化接口

[英]Instantiating an interface with a concrete class

假设对于一个程序,我需要某种列表。 任何类型的列表都可以,所以我创建一个。

List<Integer> example = new LinkedList<Integer>();

我听说,实例化对象时将其定义为接口是一种很好的做法,如果您要执行的操作需要使用该接口,而不必使用特定的具体类。 例如,我可以使“ example”列表代替ArrayList。

但是,以这种方式将LinkedList定义为List接口限制了我。 例如,我不能使用任何特定于LinkedList的方法。 我只能使用List接口本身中的方法。 我发现使用特定于LinkedList的方法的唯一方法是将示例转换为LinkedList,如下所示:

((LinkedList)example).addLast(1);

...这似乎无法达到目的,因为通过将“ example”强制转换为LinkedList,我可能还创建了它,并将其首先定义为LinkedList,而不是List。

那么,为什么要创建具体的类并通过接口定义它们呢? 有什么我想念的吗?

LinkedList实现了几个接口。

方法addLast()来自Deque接口。 可能就是您要使用的界面。

另外,您可能只需要一个List ,在这种情况下, add()方法将追加到列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM