java 如果接口List没有实现add()方法,我们如何调用List上的add方法?[duplicate]

taor4pac  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(212)
    • 此问题在此处已有答案**:

Java List is an interface with implemented methods? [closed](7个答案)
17小时前关门了。
我是编程新手,真的被困在这里了。如果我们在一个超类中有一个实现的方法,并且试图从引用中有超类类型的子类的示例调用它,那么继承的方法将不起作用。但是如果我们这里有类型List而不是ArrayList,为什么方法add()在这种情况下起作用呢?

List<String> testMethodsFromArrayList = new ArrayList<String>();
    
    TestClass () {
        testMethodsFromArrayList.add("1");
    }

我注意到接口允许这样做,而类不允许。

f0brbegy

f0brbegy1#

这就是Java中运行时多态的工作原理。
父类引用可以引用父类的对象或它的任何子类。根据父类引用所引用的类的对象,将调用该类的方法。

List<String> testMethodsFromArrayList = new ArrayList<String>();

在本例中,父类(接口)引用'testMethodsFromArrayList'指向ArrayList的对象,因此将调用ArrayList的add方法。

List<String> testMethodsFromArrayList = new LinkedList<>();

然后调用LinkedList的add()方法。
关于你的评论“例如,如果我使用超类类型引用,那么一个在子类中实现的方法就不能被调用”,你说得有一部分是对的,因为使用父类引用,你只能调用在接口/超类中定义/声明的子类的重写方法。你不能调用一个只在子类中定义而不在超类/接口中声明/定义的方法。使用父类/接口引用作为父甚至不知道该方法。

相关问题