⑧继承与is-a(扮演编译)
除了可避免类间重复的行为定义外,子类和父类还有is-a(是一种)的关系,即子类是一种父类(羊是一种动物)。
这种关系体现在代码编译上,编译过程是=从右往左,一次只编译一行。
羊类继承了动物类,Animal a=new Sheep();羊类是一种动物,即可以通过编译。反之则不对。
但下一行如果写Sheep sheep=a;则编译失败。a是Animal类声明的变量,而不一定是sheep所以失败。虽然在指向空间上,没有问题,但编译就是这样判定失败。
也可以强制转换让a扮演(Cast)sheep,这样sheep和a都参考至Sheep实例上,执行也不会有错。但如果你让a强制扮演其他子类,比如动物里的牛,编译通过后执行也会出错java.lang.ClassCastException,因为a参考的是Sheep实例,而不能扮演其他的子类。
⑨重写(Override)
1.概念:子类继承父类方法后的重写。
2.注意:private和final方法不可重写;权限不可比父类更高,只能更低;返回类型可以为父类原方法的返回类型或者及子类;