多态的概念
多态主要指同一种事物表现出来的多种形态
- 饮料: 可乐, 雪碧, 红牛, 脉动 ...
- 宠物: 猫, 狗, 小鸟 ...
- 人: 学生, 教师, 工人, 保安 ...
- 图形: 矩形, 圆形, 梯形, 三角形 ...
多态的语法格式
父类类型 引用变量名 = new 子类类型();
如: Shape sr = new Rect();
多态的特点
- 当父类类型的引用指向子类类型的对象时, 父类类型的引用可以直接调 用父类独有的方法
- 当父类类型的引用指向子类类型的对象时, 父类类型的引用不可以直接调用子类独有的方法
- 对于父子类都有的非静态方法来说, 编译阶段调用父类版本, 运行阶段调用子类重写的版本(动态绑定)
- 对于父子类都有的静态方法来说, 编译和运行阶段都调用父类版本
引用数据类型之间的转换
- 引用数据类型之间的转换方式有两种: 自动类型转换 和 强制类型转换
- 自动类型转换主要指小类型向大类型的转换, 也就是子类转向父类, 也叫做向上转型
- 强制类型转换主要指大类型向小类型的转换, 也就是父类转为子类, 也叫做向下转型或显式类型转换
- 引用数据类型之间的转换必须发生在父子类之间,否则编译报错
- 若强转的目标类型并不是该引用真正指向的数据类型时, 则编译通过, 运行阶段发生类型转换异常
- 为了避免上述错误的发生, 应该在强转之前进行判断,格式如下
if(引用变量 instanceof 数据类型)
判断引用变量指向的对象是否为后面的数据类型
多态的实际意义
多态的实际意义在于屏蔽不同子类的差异性, 实现通用的编程带来不同的效果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。