多态
1.向上转型
【概念解释】将子类的对象赋值给父类的引用
Pet pet = new Dog("旺财", "狗");
* 不需要强制转换
* 可以访问父类的方法,属性,如果子类重写了,那么调用子类
* 无法访问子类特有的方法及属性(对子类方法或属性进行遮蔽)
【原因解释】
**一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型**;所以子类向上转型之后,能调用哪些方法,取决于父类的类型;
**一个引用调用的是哪一个方法,取决于这个引用所指向的对象**;所以如果调用的属性和方法在子类中也存在,那么调用的是子类的属性和方法;
2.向下转型
【概念解释】将父类的对象赋值给子类的引用(向下转型的前提是向上转型)
//这是错误的
Person p = new Person();
Student s = (Student)p;
//这是正确的
Person p = new Student();//必须先向上转型
Student s = (Student)p;
* 需要强制转换
* 如果把一个类型转换成其他类型,编译没有报错,执行报:java.lang.ClassCastException --类转换异常
* 如果把一个类型转换成其他类型,然后再由其他类型转换回本类型,编译执行都通过
3.从属
* instanceof 来判断该引用类型变量所“指向”的对象是否属于该类
if(pet instanceof Dog){
//向下转型
((Dog) pet).bark();
}
4.接口的多态
>Fly接口
//向上转型 -- 类比 类的继承
Fly fly = new Bird();
//fly.fly(); //接口的多态表现形式
//向下转型
Bird bird = (Bird) fly;
bird.fly();
5.多态的体现
* 封装是为了保护属性的一种操作,继承是为了扩展类的功能
* 多态是由封装性和继承性引出的面向对象程序设计语言的另一特征。
* 重载:根据传入的参数不同,完成的功能也不同
* 重写:子类根据需求重写父类中的方法。
##静态多态性(编译时多态)
由方法重载(overload)实现
##动态多态性(运行时多态)
由方法重写(overridden)实现
子类对象可以作为父类对象使用。在程序中凡是需要父类对象的地方,都可以用子类对象代替。
调用规则:根据实例的类型决定调用的方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现