java对象转型和多态

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

对象转型:

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

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

instanceof 用来判断该引用型变量所“指向”的对象是否属于该类或者该类的子类。

java对象转型和多态_第1张图片
对象转型

对象转型的便利之处:对象转型中父类引用可以指向子类对象。

java对象转型和多态_第2张图片
对象转型

f函数的目的就是输出猫狗对象的名字和其他属性,没有对象转型我们可以为猫和狗各写一个f函数。可是有了对象转型之后我们可以将f函数的参数类型设置为猫和狗类的基类,这个时候f函数既可以传进来猫的引用也可以传进类狗的引用,可扩展性比较强。这个时候可扩展性达到最好了嘛?还没有,接下来介绍多态!

多态:

多态的三个必要条件:1继承;2重写;3 父类对象指向子类对象

java对象转型和多态_第3张图片
多态


java对象转型和多态_第4张图片
运行结果

在内存中的解释:

1.在栈中定义一个Cat类型的引用 c , c 指向在堆内存中new出来的Cat对象(该对象已经重写了scream 函数);

2.在栈中定义一个Lady类型的引用 l ,l 指向在堆内存中new出来的Lady对象;并将引用 c 的值赋给Lady对象的Animal类型的pet成员变量(多态)

3.l.enjoy()调用pet指向的堆内存中Cat对象的重写的scream函数(动态绑定)。

这个解释可能比较抽象献上下图参考,建议自己画图更清楚。


java对象转型和多态_第5张图片
内存图

这个图是不准确的没有画出存放代码的codesegment,理解意思就好,语言功底有限。谅解!


 

你可能感兴趣的:(java对象转型和多态)