我对我在 Java 文档和其他编程书籍中看到的对象创建的不同方式感到困惑。例如
假设有一个基类
和一个派生类
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 之间进行选择时,是否有更好的做法
,或者这只是个人决定
?
编辑:
抱歉,List 是一个接口(interface)。 另一个问题:如果我使用类型参数,我的决定会改变吗?
ArrayList<T> list = new ArrayList<T>();
更新答案:这实际上叫做“Programming to the interface”
。感谢代码大师。这个问题的答案之一用非常简单的术语解释了我正在寻找的东西 - What does it mean to "program to an interface"?
最佳答案
List
不是基类,它是一个接口(interface)
,因此应该尽可能使用。使用类实现的接口(interface)允许您使用实现该接口(interface)的所有类,而不仅仅是特定的类。
String
是一个具体的类,直接用会更清晰。然而,有时即使
String
实现了CharSequence
接口(interface),也没有必要使用CharSequence
,因为它只会造成混淆。然而,看看StringBuilder
,它几乎完全使用CharSequence
。
总而言之 - 没有更好只有合适。
关于java - 面向对象设计 : Which is better practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927452/