本文为学习笔记 能力有限 如有错误望指正。谢谢!!!
对象转型:
一个基类的引用可以指向其子类的对象,基类的引用不能访问其子类新添加的成员;
一个子类的对象可以当作基类的对象来使用称作向上转型,反之称作向下转型;
instanceof 用来判断该引用型变量所“指向”的对象是否属于该类或者该类的子类。
对象转型对象转型的便利之处:对象转型中父类引用可以指向子类对象。
对象转型f函数的目的就是输出猫狗对象的名字和其他属性,没有对象转型我们可以为猫和狗各写一个f函数。可是有了对象转型之后我们可以将f函数的参数类型设置为猫和狗类的基类,这个时候f函数既可以传进来猫的引用也可以传进类狗的引用,可扩展性比较强。这个时候可扩展性达到最好了嘛?还没有,接下来介绍多态!
多态:
多态的三个必要条件:1继承;2重写;3 父类对象指向子类对象
多态 运行结果在内存中的解释:
1.在栈中定义一个Cat类型的引用 c , c 指向在堆内存中new出来的Cat对象(该对象已经重写了scream 函数);
2.在栈中定义一个Lady类型的引用 l ,l 指向在堆内存中new出来的Lady对象;并将引用 c 的值赋给Lady对象的Animal类型的pet成员变量(多态)
3.l.enjoy()调用pet指向的堆内存中Cat对象的重写的scream函数(动态绑定)。
这个解释可能比较抽象献上下图参考,建议自己画图更清楚。
内存图这个图是不准确的没有画出存放代码的codesegment,理解意思就好,语言功底有限。谅解!
网友评论