问题的起源
在学习ArrayList中发现,使用接口Collection创建的多态ArrayList,无法调用get的方法,但是在接口List创建的多态ArrayList中却可以调用。
我起初的疑虑是:
既然在“编译看左、运行看右”的规则下,ArrayList中必然是有get()方法,那么为什么不能用呢?
结论是:
Collection接口中没有get方法,但是List接口中包含了get方法,所以在Collection接口下建立的多态没办法使用get方法(尽管new的ArrayList中有get方法,但是就是不能用!!)
验证:
Usb接口
public interface Usb {
void access();
void out();
}
KeyBoard类 Implement 于Usb
public class KeyBoard implements Usb{
@Override
public void access() {
System.out.println("override_access!");
}
@Override
public void out() {
System.out.println("override_out");
}
public void click(){
System.out.println("KeyBoard's function!");
}
}
Test主函数:
package duotai_interface_test;
public class Test {
public static void main(String[] args) {
Usb k = new KeyBoard();
k.access();
k.out();
k.click();
}
}
结果
方法click在Usb中并没有声明,尽管继承了Usb的KeyBoard中写了click,但是多态下仍然无法使用 。