关于对象实例化的简单查询

时间:2013-08-14 13:17:32

标签: java oop

Hello StackOverflowers。

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

List myList = new LinkedList();

这是一种继承形式吗?换句话说,是否会读取这个LinkedList“是一个”List并因此继承List类中定义的方法?如果是这样,如果用户构造了他或她自己的两个类并使用了与上面相同的语法,那么答案是否相同?

谢谢大家。

凯特琳

3 个答案:

答案 0 :(得分:5)

  

这是一种继承形式吗?

没有

  

如果读取这个,则LinkedList“是一个”List

  

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

没有。 List是一个接口,因此无法扩展/继承(仅实现)。但LinkedList仍然以IS-A传递,因为它实现 List接口所需的所有方法。

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

BaseType base = new SubType();

并未完全演示继承,但继承使多态成为可能,即因为子类型IS-A基类型也是如此它可以分配给基本类型引用。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

LinkedList类“服从”List的规范,因此当我们编写程序时,我们可以依赖于LinkedList的行为,与List指定的方式完全相同。这会产生更强大的程序,因为如果您决定使用其他类型的List,比如说ArrayList,那么您的程序代码不会改变,因为您不依赖于List的实现细节。

中声明变量时
 List myList;

List类型称为“明显”类型。也就是说,编译器会将myList视为其余代码中的List。你不能引用myList的任何不属于List规范的特性(没有强制转换和违反原则)。

中实例化对象时
  = new LinkedList();

LinkedList类型称为“实际类型”。编译器并不关心这个问题。它只在运行时才有意义。