2.2 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。
2.3 多态实现的条件:
1. 必须在继承体系下。
2. 子类必须要对父类中方法进行重写。
3. 通过父类的引用调用重写的方法。
多态的体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。
以animal为父类:定义成员变量,构造方法,成员方法(eat).
创建子类dog ,cat:
注:这里重写了Animal的eat方法(override为重写).
test调试:
这里的a.eat(),当a引用Dog对象时,调用Dog中的eat方法。引用Cat对象时,调用Cat中的eat方法。
2.4
重写的概念:重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
ex1:
2.5 静态绑定与动态绑定:
静态绑定
:也称为前期绑定
(
早绑定
)
,即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代 表函数重载。
动态绑定
:也称为后期绑定
(
晚绑定
)
,即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。
2.6 向上转型和向下转型:
向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。(将子类给父类,从小范围到大范围的转变)
语法格式:父类类型 对象名
= new 子类类型();
ex1:Animal animal = new Dog("旺财”,6);
使用场景:1.直接赋值
2.方法传参
public class TestAnimal {
// 2. 方法传参:形参为父类型引用,可以接收任意子类的对象
public static void eatFood(Animal a){
a.eat();
}
3. 方法返回
向下转型:
将一个子类对象经过向上转型之后当成父类方法使用。
程序可以通过编程,但运行时抛出异常---因为:animal实际指向的是狗
// 现在要强制还原为猫,无法正常还原,运行时抛出:ClassCastException
cat = (Cat)animal;
cat.mew();
// animal本来指向的就是狗,因此将animal还原为狗也是安全的
dog = (Dog)animal;
dog.bark();
(将animal强转为cat或dog)
多态的优缺点:
优点:1.降低复杂度,避免大量使用if-else.
2.可扩展能力强。
缺点:运行效率低下。