比如接口:
interface Fly {
void name();
void kkk();
}
Fly f = subObj;
// 其实多态发生在这里,f会找到其真实类型,即subObj的真实类型
// 然后去找真实类型里是否实现了void name()这个方法,没有找到则再找subObject类型的父类型或接口,这样一层层的去找
// 在java里是会从ClassA -> Fly这个链路去找void name()的实现,找不到是异常(当然编译时或类型转换时就已经拦截了不匹配的类型)
// 但是在比cj这种有扩展机制的语言里,它找的链路可能是ClassA -> 到ClassA所有的祖宗类和所有接口默认实现 存在该void name()方法的实现 则调用该方法
// ,那怕这个void name()找到的实现可能是在ClassA implements的另一个接口的默认实现(这个找到的接口和Fly没有任何关系;因为Fly接口是通过扩展到ClassA里的)
f.name();
标签:Fly,name,实现,void,多态,接口,ClassA From: https://www.cnblogs.com/silentdoer/p/17893023.html