目录
一、多态:
1、定义:
(1)具有表现多种形态能力的特征
(2)同一个引用指向不同的对象,调用相同的方法,执行的结果却不一样,这就是多态-------多态定义
(3)也就是说同一个接口,使用不同的实例化执行后得到不同的结果。
(4)在java中,有继承关系存在时,当父类的引用指向子类的对象时,可以通过父类的引用调用子类重写的方法,实现多态
2、多态的特点:
(1)在继承关系中(没有继承就没有多态)
(2)子类重写父类的方法(没有重写就没有多态)
(3)父类引用子类对象(子类到父类的转型【向上转型】)
注意:父类引用调方法时,调到的是子类中的方法
3、多态的前提:
(1)继承的存在(没有继承就没有多态)
(2)子类中重写父类的方法(多态下调用的是子类中重写的方法)
(3)父类引用变量指向子类对象(子类到父类的转型)
(4)子类到父类的转型(向上转型)
二、子类到父类的转型(向上转型)
父类类型 子类对象
Pet pet = new Dog();
1、能调到什么左边决定,执行结果是什么右边决定
2、pet能调到的方法必须是Pet中定义过的,调用时,先找子再找父,找到为止
3、父类引用调到的是子类中重写后的方法,不是父类中的方法
4、父类引用调不到子类特有的方法
5、属性不具有多态性(调不到子属性类,只能调到父类)
三、父类到子类的转型(向下转型)
总结:如果想要父类引用能调到子类中独有的方法,那么就要对父类引用做转型,即转为子类类型。也就是向下转换(强转)。
转为子类类型后就可以调到子类独有的方法了。
四、instanceof 运算符
1、instanceof 用来判断对象是否是某种类的类型
2、是则返回 true 不是则返回 false
3、可以避免代码异常,提高代码健壮性
五、父类类型做形参作多态
1、父类形参传入值,再进行操作
2、在形参的位置()里给值![](https://i-blog.csdnimg.cn/direct/3d793efef6da490697b863d7be60db58.png)
六、父类类型做返回值类型实现多态
1、父类做返回值![](https://i-blog.csdnimg.cn/direct/19d52196b9cb4c2da958a4570745f637.png)
2、返回新建的子类![](https://i-blog.csdnimg.cn/direct/c1f883fe07be44379c0c32f8fcedb53d.png)
3、创建对象并调用方法赋值给父类属性
七、Object数组
Object类型的数组可以存下所有的数据类型的值,包括对象