多态polymorphic,动态dynamic绑定机制_听韩顺平课笔记

1.养宠物引出多态

2.方法的多态

方法重载体现多态:传入不同参数,调用不同的方法
方法重写体现多态:不同的对象(父子)调用同名的方法,查找的是不同类的方法

3.对象的多态(多态的核心,编译类型,运行类型)

对象的多态核心:

  • 一个对象的编译类型和运行类型可以不一致(也可以一致)
  • 编译类型在定义对象时,就确定了,不能改变(父类引用指向子类对象)
  • 运行类型是可以变化的
  • 编译类型看定义时 = 的左边,运行类型看 = 的右边

编译类型,运行类型的代码体现:父类引用指向子类对象,且运行时以运行类型为主

4.多态快速入门

用多态机制同一管理主人喂食问题

5.向上转型

多态的前提是:两个对象(类)存在继承关系

多态的细节

  • 可以调用父类中的所有成员方法(需要遵守访问权限)
  • 编译类型决定了,能调用哪些成员(编译器javac决定)
  • 最终运行效果看子类的具体表现(编译通过了,从运行类型开始查找方法调用)

6.向下转型

为什么要向下转型?调用子类特有的方法

  • 只能转父类的引用,不能转父类的对象

  • 父类的引用必须指向当前目标类型的对象(猫不能转为狗)

7.属性重写问题(属性没有多态,属性的值看编译类型)

属性没有多态这一说,属性的值看编译类型:

instanceOf判断的是运行类型

8.多态练习

9.多态练习

  • 属性的调用,看编译类型
  • 方法的调用,看运行类型(b.display(),this.count,任然看的运行类型的count,这里的this.count != b.count)

10.动态dynamic绑定机制(非常重要)

  • 将子类的sum()注销,调用a.sum()时输出什么(调用的是父类还是子类的getI()?) => 调用方法时与运行类型绑定

11.多态数组1,多态数组与动态绑定机制

同一个数组,存放不同类型的对象(父类引用指向子类对象)

多态数组与动态绑定机制

12.多态数组2,多态数组调用子类特有方法(类型判断+向下转型),instanceOf判断运行类型

编译类型中没有的方法,无法通过 对象. 来调用

  • 多态数组调用子类特有方法(类型判断+向下转型)

13.多态参数(方法定义的形参类型为父类类型,实参类型允许为子类类型)

posted @ 2021-09-09 21:06  CH0701  阅读(71)  评论(0)    收藏  举报