1.什么是多态?
多态是具有表现多种形态的的能力特征。更专业的说法是:同一个实现接口使用不同的实例而执行不同的操作。
2.多态性与继承,方法重写密切相关。
3.子类到父类的转换 (向上转型)
// 将int型常量或变量的值赋给double型变量,可以自动进行类型转换
int i =5;
double d1 =5;
// 将double 型常量或变量的值赋给 int型变量,进行强制类型转换
double d2 =3.14;
int a=(int)d2;
4.在引用数据类型的子类和父类之间也存在类型转换,如下代码:
Dog dog= new Dog ("欧欧","雪纳瑞"); //不涉及类型转换
dog.eat();
Pet pet = new Dog ("欧欧","雪纳瑞"); // 子类到父类的转换
pet.eat(); // 会调用Dog类重写的eat 方法,而不是pet类的eat() 方法
pet.catchingFlyDisc(); // 编译错误, 父类的引用无法调用子类的特有方法。
5.子类转换成父类的规则:
(1)将一个父类的引用指向一个子类的对象,称为向上转型(upcasting),自动进行类型转型。
(2)此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
(3)此时通过父类引用变量无法调用子类特有的方法。
6.使用父类作为方法形参实现多态。
使用父类作为方法的形参,是Java中实现和使用多态的主要方式之一。
7.使用父类作为方法返回值实现多态。
使用父类作为方法的返回值,是Java中实现和使用多态的另一种方式。
8.总结: (实现多态的3个条件)
继承的存在(继承是多态的基础,没有继承就没有多态)。
子类重写父类的方法(多态下调用子类重写后的方法)
父类引用变量指向子类对象(子类到父类的转换)。