为什么List总是使用ArrayList方法?

时间:2017-08-05 03:38:57

标签: java list arraylist

在开始之前,我有一些小代码可以更好地理解问题。

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     

    }
}

如您所见,如果我使用Interface类型对象来调用类(Circle)方法(kill),我不被允许。这是有道理的,因为kill方法既未在接口中定义也未实现。

我的问题是,如果这是一个案例,当我们以下面提到的方式使用List时,为什么它总是说List使用ArrayList方法......?从技术上讲,它不应该根据我上面的例子。

List myList = new ArrayList();

如果没有,那么List使用哪种方法..?因为List定义的方法需要在实现List的类中的某个地方实现。没有..?

检查以下链接中的答案中的第一条评论,它也说同样的事情。 What is the difference between List and ArrayList?

是否有人能想出更清晰的图片,它的工作原理如何?列表使用哪种方法在上面的类型片段..?

1 个答案:

答案 0 :(得分:2)

在基类/接口引用对象(接口列表)中存储派生类的对象(在本例中为ArrayList)时,只能访问基类/接口中定义的方法。

必须在界面示例中覆盖这些方法。

所以当你写

List x = new ArrayList();

您可以访问在ArrayList类中重写的List接口的方法,但不能访问所有ArrayList方法。