1.多态的概念:具有表现多种形态的能力的特征;或就是指一个引用类型在不同情况下的多种状态。
多态是指通过指向父类的指针,来调用,在不同子类中实现的方法。
2.子类到父类的转换
Person person = new Hero("小明","法师");//子类到父类的转换
person.blood();//会调用Hero类重写的blood()方法,而不是Person类的blood()方法
规则:
- 将一个父类的引用指向一个子类的对象,称为向上转型,自动进行类型转换
- 通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
- 通过父类引用变量无法调用父类特有的方法
2.父类到子类的转换
以及
instanceof运算符
用途:用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false。
Person person = new Hero("小明","法师");//子类到父类的转换,向上转型
person.blood();//会调用Hero类重写的blood()方法,而不是Person类的blood()方法
Hero hero = (Hero) person;//父类到子类的转换,向下转型
hero.affairs();
这样写会出现类型转换异常ClassCastException,应当使用instanceof运算符
**在强制类型转换之前通过 instanceof 运算符检查对象的真实类型,再进行相应的强制类型转换,这样就可以避免类型转换异常,**从而提高代码的健壮性。
Person person = new Hero("小明","法师");//子类到父类的转换,向上转型
person.blood();//会调用Hero类重写的blood()方法,而不是Perso
- List item
n类的blood()方法
/*向下转型
*/
if(person instanceof hero){
((Hero) person).affairs();
}else{
((Army) person).patrol();
}
3.实现多态的两种方法
- 使用父类作为方法形参实现多态
- 使用父类作为方法返回值实现多态
4.实现多态的3个条件
- 继承的存在
- 子类重写父类的方法
- 父类引用变量指向子类(向上转换)
5、多态的优点
减少代码量,提高代码的可扩展性和可维护性。