Java ArrayList instantiation
我只想知道为什么我们初始化父类的对象并用子类实例化它,而不是直接实例化子类对象。
Sample:
1 | List<String> sampleList=new ArrayList<String>(); |
而不是
1 | ArrayList<String> sampleList=new ArrayList<String>(); |
假设我创建了一个方法来处理
1 2 3 4 5 6 7 | public int sum(ArrayList<Integer> list){ int sum = 0; for(Integer x : list){ sum += x; } return sum; } |
到目前为止,这还可以,任何拥有
但我为什么要排除它们呢?我的函数实际上并没有使用任何特定于
1 2 3 4 5 6 7 |
同样地,如果我不关心某个变量是什么类型的
你的问题至少在以下方面是错误的:
在
在实例化对象之前,不能对其进行初始化。
实际上,我们实例化类,而不是对象。类实例化的结果是一个对象。
如果我们从您的问题中消除所有这些错误,并改为"为什么我们要声明一个通用类型的变量",那么答案是它使代码更可读和更可维护:这样,您就保证不会使用
首先,列表是接口而不是类。其次,多态性是面向对象编程中的一个重要概念。
使用对父类(或由该类实现的接口)的引用的用例是,如果您希望使用该引用迭代该父类的不同子类。
你可能对这条线感兴趣。