对象的类型转换往往发生在具有继承关系的父类和子类之间,向上类型转换是将子类对象转为父类对象。如果A 是B的父类,当把子类对象赋值给父类对象的引用时,称父类的引用是子类对象的上转型对象。例如:
或者:
其中,new B()是子类B的一个对象,而a为父类A 的一个引用变量,a=new B()这条语句使得父类的引用a指向了子类对象new B(),此时a就叫作new B()的上转型对象。
上转型对象有三个特点:
(1)当子类重写了一个方法后,上转型对象调用方法时,调用的必须是经过重写后的方法。示例代码如下:
上述代码的运行结果如下:(www.xing528.com)
Method Rewrite Test1类中的第4~7行代码与Method Rewrite Test类中的第4~7行代码不同。第4行代码中new Cat("花花",1,"鱼")创建了一个Cat类对象。Animal animal创建了一个Animal类的引用,把new Cat("花花",1,"鱼")赋值给animal,也就是让父类Animal的引用变量指向了子类Cat的某个对象,此时引用变量animal就叫做子类对象new Cat("花花",1,"鱼")的上转型对象。第5行,上转型对象animal调用getInfo方法,此时的getInfo方法是Cat类中重写后的getInfo方法。第6行代码,创建了Dog类的对象new Dog("旺旺",2,"骨头"),并把该对象赋值给animal变量,此时animal变量又变成了Dog类的new Dog("旺旺",2,"骨头")对象的上转型对象,第7行代码animal调用getInfo方法时,调用的就是Dog类中重写后的getInfo方法。
从运行结果可以看出,Method RewriteTest和MethodRewriteTest1的结果是一样的,但是Method Rewrite Test1中只定义了一个animal变量,而Method Rewrite Test中却定义了cat和dog 两个引用变量。所以,当需要调用很多子类中重写后的方法时,一般都采用Method Rewrite Test1中的上转型。
(2)当子类继承或隐藏了某个成员变量或方法,此时上转型对象可以访问。
(3)上转型对象不能操作子类新增的成员变量,也不能操作子类新增的方法。
在上转型的三个特点中,最常用的就是第(1)条,有关第(2)、(3)条,请读者自行编写程序验证。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。