java - 面向对象设计 : Which is better practice?

标签 java oop class interface

我对我在 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"?

最佳答案

  1. List 不是基类,它是一个接口(interface),因此应该尽可能使用。

    使用类实现的接口(interface)允许您使用实现该接口(interface)的所有类,而不仅仅是特定的类。

  2. String是一个具体的类,直接用会更清晰。

    然而,有时即使 String 实现了 CharSequence 接口(interface),也没有必要使用 CharSequence,因为它只会造成混淆。然而,看看 StringBuilder,它几乎完全使用 CharSequence

总而言之 - 没有更好只有合适

关于java - 面向对象设计 : Which is better practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927452/

相关文章:

java - 为什么在Thread类 "public static final int MAX_PRIORITY"中声明为int?

java - Tomcat 关闭 websocket 连接并出现错误

javascript - jQuery 中嵌套对象类的全局变量

java - 使用 Java For-Each 循环迭代具有私有(private)访问权限的 ArrayList?

java - 为什么这个观察者在运行时不更新?

java - 如何找出 Java 程序在启动时使用了哪些库?

java - 常量应该放在接口(interface)中吗?

php - 使用 $this 访问子项中的父项属性

c++ - 符合条件的声明符 ID 后的名称查找

c# - 请批评我的课