4

你好 StackOverflowers。

这几乎可以肯定是关于对象实例化的一个非常基本的问题,但在以下代码示例中:

List myList = new LinkedList();

这是一种继承吗?换句话说,人们会不会读到这个有 LinkedList “是一个” List 并因此继承了 List 类中定义的方法?如果是这样,假设用户构建了他或她自己的两个类并使用与上述相同的语法,答案是否相同?

谢谢大家。

凯特琳

4

3 回答 3

5

这是一种继承吗?

不。

有人会读到这个有LinkedList“是一个”列表吗

是的。

因此继承了 List 类中定义的方法?

No.List是一个接口,因此不能扩展/继承(仅实现)。但LinkedList仍然通过 asIS-A因为它实现List了接口所需的所有方法。

如果用户构建了他或她自己的两个类,一个是类,另一个是从它派生的,那么是的,它将是继承。但是,以下

BaseType base = new SubType();

并不完全展示继承,而是通过继承使多态成为可能,即因为子类型基类型也可以分配给基类型引用。IS-A

于 2013-08-14T13:21:49.057 回答
4

不完全是,因为List实现的接口LinkedList,而不是 的超类LinkedList。您应该阅读接口。没有's 方法的继承List- 相反,只需要在接口LinkedList中列出方法。List

于 2013-08-14T13:19:37.050 回答
1

有一条原则说“始终针对接口而不是实现编程”。LinkedList 是 List 接口的一个实现。也就是说,List 只是指定 List 可以做什么,但没有说明它是如何做的。

LinkedList 类“遵守” List 的规范,因此当我们编写程序时,我们可以依赖 LinkedList 的行为方式与 List 指定的完全相同。这使得程序更加健壮,因为如果您决定使用另一种类型的 List,例如 ArrayList,那么您的程序代码不会更改,因为您不依赖于 List 的实现细节。

当您声明一个变量时

 List myList;

List 类型称为“表观”类型。也就是说,编译器会将 myList 视为其余代码中的 List。您不能引用不属于 List 规范的 myList 的任何功能(不强制转换和破坏原则)。

当您实例化对象时

  = new LinkedList();

LinkedList 类型被称为“实际类型”。编译器不太关心这个。它只在运行时很重要。

于 2013-08-14T13:28:44.213 回答