【发布时间】:2017-08-05 03:38:56
【问题描述】:
在开始之前,我有一些小代码可以更好地理解问题。
public interface Shape {
public void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drwaing circle");
}
public void kill() {
System.out.println("Class specific Method");
}
public static void main(String[] args) {
Circle C = new Circle();
C.draw(); //Compiled
C.kill(); //Compiled
Shape S = new Circle();
S.draw(); //Compiled
S.kill(); //Not able to Compile
}
}
如您所见,如果我使用接口类型对象调用类(Circle)方法(kill),我是不允许的。这是有道理的,因为 kill 方法既没有在接口中定义也没有实现。
我的问题是,如果是这样的话,当我们以下面提到的方式使用 List 时,为什么总是说 List 使用 ArrayList 方法...?从技术上讲,它不应该按照我上面的例子。
List myList = new ArrayList();
如果不是,那么 List 使用谁的方法..?因为 List 定义的方法需要在实现 List 的类中的某个地方实现。没有..?
也检查下面链接中答案中的第一条评论,它也说了同样的话。 What is the difference between List and ArrayList?
有没有人能想出更清晰的图片,它是如何工作的? List 使用了谁的方法,而上面的种类 sn-p..?
【问题讨论】:
-
ArrayList 实现列表。不是相反
-
@efekctive...好吧..如果它实现...它在哪里定义..或者当我们以这种方式使用时它会自动实现..?
-
List 类是 Java 语言的一部分。它是一个接口,上面有方法(但实际上不做任何事情——它们是任何实现类的契约)。 ArrayList 是 List 接口的实现。它有实际工作的方法。
-
并不总是这么说。我在 20 多年前从未见过这种说法。你在说什么?
-
不要试图让你失望:只需按照 java api 文档中的链接。他们教了很多东西,让你免去获得刻薄的 cmets 的麻烦。