方法一:通过引用基类来创建子类的对象。方法二:通过引用同一个类来创建子类的对象。
List<Point> objOne = new ArrayList<Point>();
ArrayList<Point> objTwo = new ArrayList<Point>();
方法一:通过引用基类来创建子类的对象。方法二:通过引用同一个类来创建子类的对象。
List<Point> objOne = new ArrayList<Point>();
ArrayList<Point> objTwo = new ArrayList<Point>();
List 甚至是一个接口。它更抽象,准确地定义但不多于 API 属性。Java 中的实现可能不同:ArrayList 用于批量工作,LinkedList 仅用于几个,节省内存。应该隐藏此实施决策。
函数应该在 List 上运行,而不是在特定实现上运行,比如 ArrayList。如果谈论 Lists 而不是 ArrayLists,它也更普遍。因此,对于变量,我也不会过度指定它们的类型。
在 VB、PHP 等许多(脚本)语言中,不存在这种区别,并且只有一种类型,一种实现。这简化了他们的语言并且可能会吸引一些人,但 Java 有一个很好的技术方面。
您可以使用不同的实现,使用工厂方法动态选择一个。在单元测试中模拟实现。
List 是一个接口,而 ArrayList 是一个类。因此,假设您的同事编写了一个函数,该函数接收点列表并对其进行一些处理。现在他使用这样的抽象,以便他的代码可以在 ArrayList 和 LinkedList 上运行。
public void myfunction(List<Point> pointlist){
//do something on the point
}
现在您的第一个对象 objOne 将使用此函数,因为它使用了抽象。这就是编写好的代码的方式。
现在您的第二个对象 objTwo 将无法使用此函数,因此应避免使用此类代码。