Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 为什么列表总是使用ArrayList方法?_Java_List_Arraylist - Fatal编程技术网

Java 为什么列表总是使用ArrayList方法?

Java 为什么列表总是使用ArrayList方法?,java,list,arraylist,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() { Syste

在开始之前,我有一些小代码来更好地理解这个问题

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     

    }
}
如您所见,若我使用接口类型对象来调用类(循环)方法(kill),那个么我是不被允许的。这是有意义的,因为kill方法既没有在接口中定义,也没有实现

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

List myList = new ArrayList();
如果没有,那么列表中使用的方法是谁。。?因为列表定义的方法需要在实现列表的类中的某个地方实现。不

在下面的链接中检查答案中的第一条评论,它也说了同样的事情。


是否有人能想出更清晰的图片,它是如何工作的?当您将派生类的对象(在本例中为ArrayList)存储在基类/接口引用对象(接口列表)中时,您只能访问基类/接口中定义的方法

必须在接口示例中重写这些方法

所以当你写作的时候

List x = new ArrayList();

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

ArrayList实现List。不是相反around@efekctive...Okay..if它在定义的地方实现..或者以这种方式使用..时自动实现..?List类是Java语言的一部分。它是一个有方法的接口(但实际上不做任何事情——它们是任何实现类的契约)。ArrayList是List接口的一个实现。它有一些确实有效的方法,但并不总是这么说。20多年来,我从未见过这种说法。你在说什么?不要试图贬低你:只需遵循JavaAPI文档中的链接即可。他们教了你很多东西,省去了你得到尖刻评论的麻烦。@Chandrasekhra,就像你说的那样..“你可以访问列表接口的方法,这些方法在ArrayList类中被重写”。但当我们使用“List x=new ArrayList();”时,我们从不重写类中编写此代码的任何地方?它会自动允许访问方法来工作这些方法是什么以及它们是如何被重写的,您正在谈论的..?ArrayList类默认会重写它..您不需要这样做