多态
实际运行的数据类型和赋值时的数据类型不一致;
定义时的类型和实际的数据类型不一致;
编译阶段和运行阶段的数据类型不同;
运行时多态:
超类的对象可以引用子类的实例;向上转型
该对象仍然只能调用超类中定义的方法和变量;
对于覆盖或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择那个方法调用
操作流程:
1.继承;2.方法重写;3.父类对象引用子类实例;
注意事项
当超类的对象是子类实例的引用时,这个对象所访问的成员 必须是超类中所具有的,因为在编译过程中数据类型还是超类,如果超类中无子类的成员,在编译时是找不到的,当编译完开始运行时,对象才是子类;
这个对象不能访问子类自己创建的成员;
当这个对象访问的是被覆盖的方法,则调用的是子类中覆盖方法;
只有这个对象被强制转化成子类类型时,这个子类的的所有成员才有可能被访问;
instanceof关键字:判断某个对象是否属于某个类;
属于同一个父类的子类相互之间称作兄弟类;兄弟类不能强制转化,并且一般不会把父类强之转化为子类;
总结
前提:
需要存在继承或者实现关系;
要有覆盖操作;
成员方法:
编译时,要查看引用变量所属类中是否由所调用的方法;
运行时,调用实际对象所属类中的重写方法;
成员变量:
不具有多态性,只看引用变量所属类;

被折叠的 条评论
为什么被折叠?



