一.多态
1.概念
多态是同一个行为具有多个不同表现形式或形态的能力。
2.实现条件
1. 必须在继承体系下;
2. 子类必须要对父类中方法进行重写;
3. 通过父类的引用调用重写的方法。
3.多态的好处
1. 能够降低代码的 "圈复杂度", 避免使用大量的 if - else
2. 可扩展能力更强
二.重写
1.概念
重写(override):也称为覆盖,覆写。
2.重写规则
2.1子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致;
2.2被重写的方法返回值类型可以不同,但是必须是具有父子关系的;
2.3子类重写父类的方法,子类的权限要大于等于父亲的权限;
2.4父类被static、private、final修饰的方法、构造方法都不能被重写;
2.5重写的方法, 可以使用 @Override 注解来显式指定.。有了这个注解能帮我们进行一些合法性校验.。例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写。
3.重写与重载
3.静态绑定和动态绑定
3.1 静态绑定
也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。
3.2 动态绑定
也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。
三.向上转型和向下转型
1.向上转型
1.1概念
概念:实际就是创建一个子类对象,将其当成父类对象来使用。
可以让代码更加简单,但是不能调用子类特有的方法。
1.2语法格式
语法格式:父类 对象名 = new 子类();
Anmial anmial=new Dog();
1.3使用场景
1.直接赋值
Anmial anmial=new Dog("大黄",1);
2.方法传参
public static void eatFood(Animal a){
a.eat();
}
3.方法返回
public static Anmial fun(){
Dog dog=new Dog("大黄",1);
return dog;
}
2.向下转型
向上转型后想要调用子类的方法,那就要向下转型,将其还原回原子类。
向下转型不安全,容易转错子类,可以使用instanceof来判断是否转换正确
Anmial anmial=new Dog();
Dog dog=new Dog();
if(anmial instanceof Dog){
dog=(Dog)anmial;
}