多态
# 定义
- 多态就是指多种状态,同一个行为,不同的子类表现出不同的形态
- 多态指同一个方法调用,由于对象不同会产生不同的行为
# 好处
- 提高扩展性
- 符合开闭原则
# 多态必要条件:
- 继承,发生在继承关系中
- 重写,子类对父类的方法进行重写
- 父类引用子类对象
# 深入认识多态
Animal an = new Dog();
1
- 上述代码中 左侧的 Animal 是编译前的类型。右侧是运行后识别的类型
# 从安全的角度理解向上类型转换/ 向下类型转换
Animal an = new Dog();
1
- 以上代码其实就是向上类型转换。要知道类 Dog 的字段/方法 一定多余父类 Animal.
- 所以父类需要的字段以及方法,在子类身上一定会有的,所以可以直接赋值
Animal an = new Dog();
Dog d = an;
1
2
2
- 但是以上代码
Dog d = an;
是不行的。这种方式是向下类型转换,此时,子类中存在的字段,在父类中不一定存在。 - 所以这样直接转换是不安全的。必须
Dog d = (Dog)an;
强制类型转换一下 - 上述实例中好比,double 以及 int 之间的类型转换
- 总而言之,言而总之,
多的赋值给少的,是可以的。但是少的赋值给多的,是不可以的
# 多态应用实例
- 父类当做方法的形参,传入具体的子类对象
- 父类当做方法的返回值,返回具体的子类对象
- 接口当做方法的形参,传入具体的实现类的对象
- 接口当做方法的返回值,返回具体的实现类的对象