我研究了多态,并了解它可以像下面那样进行动态方法绑定.
假设类Animal是抽象类.
public class AnimalReference
{
public static void main(String args[])
Animal ref // set up var for an Animal
Cow aCow = new Cow("Bossy"); // makes specific objects
Dog aDog = new Dog("Rover");
// now reference each as an Animal
ref = aCow; ref.speak();
ref = aDog; ref.speak();
}
Run Code Online (Sandbox Code Playgroud)
我曾经创建过ArrayList的实例,如:
ArrayList myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
但通常我认为人们写道:
Collection myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
所以我的困惑是宣称收藏的好处是什么?另外我不知道你可以在"myList"前面有"Collection"(这是一个非抽象类的接口).
为什么说这不是好习惯:
ArrayList myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
我阅读了Collection接口和ArrayList Java文档以及在线教程,但仍然不太清楚..有人能给我一些解释吗?
Pét*_*rök 11
如果您声明myList为ArrayList,则修复其具体类型.使用它的每个人都将依赖于这种具体类型,并且很容易(甚至是无意中)调用特定的方法ArrayList.如果以后您决定将其更改为eg LinkedList或CopyOnWriteArrayList,则需要重新编译 - 甚至可能更改 - 客户端代码.接口编程消除了这种风险.
请注意,在Collection和之间ArrayList,还有另一个抽象层次:List接口.通常,列表的使用模式与地图,集合或队列的使用模式非常不同.因此,工作所需的集合类型通常在早期就已确定,并且不会发生变化.将您的变量声明为a List使得此决定变得清晰,并为其客户提供有关此集合服从的合同的有用信息.CollectionOTOH通常不仅仅是迭代它的元素非常有用.
| 归档时间: |
|
| 查看次数: |
3951 次 |
| 最近记录: |