接口实现多态,本质上是接口方法实现的多态

发布时间 2023-12-10 18:23:48作者: Silentdoer

比如接口:

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();