你真的了解多态吗?

多态

日常求赞,感谢老板。

欢迎关注公众号:其实是白羊。干货持续更新中......

一、实质(比较官方的回答)

多态是指:当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务,而这一切对于系统A而言是透明的。

二、举例理解

父类:动物类;子类:猫类和狗类;父类的方法cries()被两个子类重写。

现在有一个功能要实现发出某种动物的叫声,动物有很多种,我们只需要要这样写:

public void animalCries(动物 a){
  a.cries()
}
复制代码

在需要动物发声的时候直接调用:

动物 a=new 猫();
animalCries(a);

动物 b=new 狗();
animalCries(b);
复制代码

就能不用改动原始代码。编译时变量a就被认定为代码中所声明的动物对象,程序在执行的过程中会看动物a这个变量引用的到底是猫对象还是狗对象。动态绑定。

总结

  1. 向上转型:声明的变量类型是父类,变量引用的对象是子类。(看上去是爸爸,仔细一看是儿子)
  2. 对于引用对象而言,Java编译器会按照它声明时的类型来能处理,运行时Java虚拟机会按照它实际引用的对象来处理。
  3. 在运行环境中,引用类型里的方法和成员变量的绑定是有规则的:
    • 动态绑定:实例方法的绑定(实际看变量引用的对象的类型)
    • 静态绑定:静态方法和成员变量(实际看变量声明时的类型)

日常乞讨

  • 如果你认为本文对你有帮助,还请「在看/转发/赞/star」,多谢
  • 如果你还发现了更好或不同的想法,还请在留言区不吝赐教,一起探讨交流修改,万分感谢

欢迎持续关注公众号:「其实是白羊」

在这里插入图片描述

猜你喜欢

转载自juejin.im/post/5e82bdf06fb9a03c387f2d2e