子类与父类的关系是“ is - a ” 关系,当说到老虎是动物时,老虎将失掉老虎独有的属性和功能。
对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。
(1)上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法;
(2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的子类重写的方法。
上转型对象操作子类继承或重写的的实例方法,其作用等价于子类对象去调用这些方法。
因此,如果子类重写了父类某个实例方法后,当对象的上转型对象调用这个实例方法时,一定调用了子类重写的实例方法。
注意:
(1)父类创建的对象不等于子类对象的上转对象;
(2)可以将对象的上转型对象再强转换到一个子类对象,这时,该子类对象又具有了所有的属性和功能;
(3)不可以将父类创建的对象的引用赋值给子类声明的对象。
如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。
继承与多态:
当一个类有很多子类时,并且这些子类都重写了父类中某个方法。
当把子类创建的对象实例的引用放到一个父类的对象中时,就得到该对象的一个上转型对象,那么这个上转型对象在调用这个方法时就可能具有多种形态。
因为不同的子类在重写父类的方法时可能产生不同的行为。
多态性是指父类的某个方法被子类重写,可以各自产生自己的功能行为。