子类能够赋值给超类,称之为向上转型,这个是自动的。java
超类不能够赋值给子类,这个是向下转型,须要咱们手动实现。函数
赋值给超类的子类引用在运行期间将表现出不一样的特性,这就是多态。spa
小类型 可转换为 大类型 code
大类型 转小类型须要 强制转换对象
对于存在继承关系的强制类型转换:继承
子类转换为父类属于向上塑型,能够直接转换编译
父类转换为子类属于向下塑型,须要强制类型转换,可是不必定成功。成功的条件是这个父类是通过子类向上塑型转换来的class
即 :Father father=new Son(); Son son=(Son)father;变量
对于不存在继承关系的强制类型转换,通常都是失败的(若是不写转换方法的话)引用
即:
子类可转为父类,父类不能够转为子类(若是不用强制类型转换)
1. 子类和父类含有相同的成员变量的时候,访问的是父类的成员变量
2. 子类和父类含有相同的成员方法是,访问的是子类的成员方法
3. 子类和父类含有相同的静态函数和静态方法时,访问的是父类的。
4. 父类不能访问子类特有成员和方法(强制类型转换除外)
也就是说,只有在访问成员方法的时候,才会表现出多态。
或者说:
对象多态时:
1.成员变量:(不涉及覆盖)
编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译经过,没有,编译失败。
运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
简单的说:编译和运行都参考等号的左边。
2.成员函数(非静态):
编译时:参考引用变量所属的类中是否有调用的成员变量, 有, 编译经过, 没有,编译失败:
运行时:参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边, 运行看右边。
3.静态函数, 变量:
编译和运行都是参考左边参数类型!
其实静态方法不存在多态, 静态方法是属于类的,咱们说的是对象的多态!静态方法直接用类名调用就行了,
不必建立对象!
静态的方法只能被静态的方法所覆盖!