java对象转型和多态

本文为学习笔记 能力有限 如有错误望指正。谢谢!!!

对象转型:

一个基类的引用可以指向其子类的对象,基类的引用不能访问其子类新添加的成员;

一个子类的对象可以当作基类的对象来使用称作向上转型,反之称作向下转型;

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,理解意思就好,语言功底有限。谅解!


 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容