Day13

有了对象的多态以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性与方法不能调用。

如何才可以调用子类特有的的属性和方法?
1.使用强制类型转换符
Day13
注意,使用强制类型转换时,可能出现ClassCastExecption的异常,
为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型,如果返回false,不进行向下转型

a instanceof A: 判断对象a是否是类A的实例。如果是,返回true,如果不是,返回false。
也就是判断你创建的对象a是不是A这个类的对象

如果 a instanceof A 返回true,则 a instanceof B也返回true。
其中 ,类B是类A的父类

== 对于引用数据类型来讲,比较的是两个引用数据类型变量的地址值是否相同

若子类重写了父类的方法,就意味着子类里的定义的方法彻底覆盖了父类里的同名方法。系统将不可能把父类里的方法转移到子类中,编译看左边,运行看右边。

对于实例变量则不存在这样的现象,即使子类里定义了与父类完全相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量,编译运行都看左边。

多态只能调用被重写的方法