【问题标题】:Why List always use ArrayList Methods?为什么 List 总是使用 ArrayList 方法?
【发布时间】: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 的麻烦。

标签: java list arraylist


【解决方案1】:

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

这些方法必须在接口示例中被覆盖。

所以当你写的时候

List x = new ArrayList();

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

【讨论】:

  • @Chandrasekhra,就像你说的......“你可以访问在 ArrayList 类中被覆盖的 List 接口的方法”。但是当我们使用“List x = new ArrayList(); 时,我们永远不会覆盖我们编写此代码的类中的任何地方?它会自动允许访问方法来工作那些方法是什么以及它们是如何被覆盖的,你正在谈论..?
  • ArrayList 类默认会覆盖它..你不需要
猜你喜欢
  • 2012-04-08
  • 2023-04-11
  • 1970-01-01
  • 2015-05-29
  • 2011-10-15
  • 1970-01-01
  • 2017-07-08
  • 2021-12-19
  • 2020-07-06
相关资源
最近更新 更多