Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在声明对象时使用超类或派生类的区别_Java - Fatal编程技术网

Java 在声明对象时使用超类或派生类的区别

Java 在声明对象时使用超类或派生类的区别,java,Java,两者的区别是什么 Collection c = new ArrayList(); 及 它们似乎都是ArrayList类型,因此能够调用相同的方法。在第二种情况下,您可以在c上调用特定于ArrayList的方法,因为c被声明为类型ArrayList 在第一种情况下,您只能调用为集合定义的方法(并且必须位于ArrayList) 例如,ArrayList声明使用索引(如get和indexOf)但集合没有索引的函数。ACollection是一个接口,它定义了共享集合行为的最高级别,并扩展了Iterab

两者的区别是什么

Collection c = new ArrayList();


它们似乎都是ArrayList类型,因此能够调用相同的方法。

在第二种情况下,您可以在
c
上调用特定于
ArrayList
的方法,因为
c
被声明为类型
ArrayList

在第一种情况下,您只能调用为
集合定义的方法(并且必须位于
ArrayList


例如,
ArrayList
声明使用索引(如
get
indexOf
)但集合没有索引的函数。

A
Collection
是一个接口,它定义了共享集合行为的最高级别,并扩展了
Iterable
(它只是定义了
迭代器()
方法)

列表
是定义最高级别的共享
列表
行为的接口

ArrayList
是列表的一种实现,通常不会在声明中使用,除非您需要实现保证(例如,快速索引访问),但可以用作列表值


阅读文档以查看差异–API中描述了这些差异。实现(
ArrayList
)将在其实现的每个接口中对每个方法有一个特定于类型的实现。

与多态性有关
ArrayList c = new ArrayList();