【发布时间】:2013-02-02 08:40:13
【问题描述】:
我对创建对象的不同方式感到困惑,我在 java 文档和其他编程书籍中看到过。例如
假设有一个base class 和一个derived class
1- 我有一个Base 类型的变量,它引用Derived 类型的对象
List<String> list = new ArrayList<String>();
2- 我有一个Derived 类型的变量,它引用Derived 类型的对象
ArrayList<String> arrList = new ArrayList<String>();
我的问题是在选择 1 和 2 时我应该怎么想?是不是在一般 Base-Derived 场景中利用Polymorphism?
在我不知道的 1 和 2 之间进行选择时,是否有 better practice,或者它只是 personal decision?
编辑:
对不起,List 是一个接口。 另一个问题:如果我使用类型参数,我的决定会改变吗?
ArrayList<T> list = new ArrayList<T>();
更新答案:这实际上称为"Programming to the interface"。感谢代码大师。在这个问题的答案之一中用非常简单的术语解释了我正在寻找的内容 - What does it mean to "program to an interface"?
【问题讨论】:
-
通常首选选项 1(忽略抽象基类和接口之间的区别)。在 OOP 中,我们称之为“对接口编程”。
-
很抱歉。请查看另一个问题,已编辑。
-
我仍然建议您将
list声明为List<T>而不是ArrayList<T>。更改为类型参数不会显着改变您原来的问题。