- 此问题在此处已有答案**:
Java List is an interface with implemented methods? [closed](7个答案)
17小时前关门了。
我是编程新手,真的被困在这里了。如果我们在一个超类中有一个实现的方法,并且试图从引用中有超类类型的子类的示例调用它,那么继承的方法将不起作用。但是如果我们这里有类型List而不是ArrayList,为什么方法add()在这种情况下起作用呢?
List<String> testMethodsFromArrayList = new ArrayList<String>();
TestClass () {
testMethodsFromArrayList.add("1");
}
我注意到接口允许这样做,而类不允许。
1条答案
按热度按时间f0brbegy1#
这就是Java中运行时多态的工作原理。
父类引用可以引用父类的对象或它的任何子类。根据父类引用所引用的类的对象,将调用该类的方法。
在本例中,父类(接口)引用'testMethodsFromArrayList'指向ArrayList的对象,因此将调用ArrayList的add方法。
然后调用LinkedList的add()方法。
关于你的评论“例如,如果我使用超类类型引用,那么一个在子类中实现的方法就不能被调用”,你说得有一部分是对的,因为使用父类引用,你只能调用在接口/超类中定义/声明的子类的重写方法。你不能调用一个只在子类中定义而不在超类/接口中声明/定义的方法。使用父类/接口引用作为父甚至不知道该方法。