面向对象三大特征:封装,继承,多态
三大特征都很重要,联系紧密,现在来学习一下三大特征之多态
概念:
官方概念:编译时跟运行时类型不一致就产生了多态
民间理解:父类类型的变量,存放子类类型的对象,可能存放子类类型的对象有多种可能
使用多态的前提:必须存在继承关系
多态的编译过程:
编译时:
看左边,看父类类型,会到父类类型里面去找对应的属性,
如果没有找到,会想更高的父类类型去找,如果找到编译通过
如果找不到编译错误
运行时:
先在子类找,如果子类没有找到,去父类找,直到找到为止
注意:
如果父类中没有此方法,子类中存在,但是编译不会通过
因为编译是先从父类寻找,运行时才从子类开始寻找
编译时运行细节:
多态编译时和运行时的细节:
实例方法:
父类中有一个方法,子类覆写了 :
编译通过,运行的是子类的方法
父类中有一个方法,子类没有:
编译通过,运行的是父类的方法
父类中没有,子类有一个方法:
编译失败
父类子类都没有:
…都没有还运行个屁啊…
静态方法:
父类中静态方法:
子类无法覆写父类用static修饰的方法
字段没有覆写一说
参数传递特点:
多态在传递参数时的特点:
可以将多个子类的类型在父类方法中进行覆盖
父类类型的变量存放子类类型的对象
还挺有意思的
多态Demo:
1 | public class DuoTaiDemo { |