向上转型
在Java 编程思想中第六章讲到了"向上转型",我认为向上转型就是基类的引用指向派生类的对象,不知是否是这样?另一个问题是这样做有什么好处? 问题点数:10、回复次数:6Top
1 楼kblmkblm(haha)回复于 2005-03-12 12:11:31 得分 0
sorry,基类引用指向派生类对象是什么意思?我的理解:一个类继承另一个类,子类生成一个对象,继承了父类的数据成员和方法,然后强制类型转换成父类。但在内存中子类对象的this指针仍指向本对象,如果子类override从父类继承的方法,该对象调用的方法仍是子类对象的方法,即覆写后的方法,这样可以在运行时刻才绑定方法,使程序员不用担心调用错误的方法,这应该就是著名的多态性。不知道这样理解对不对。Top
2 楼quiton(蛛蛛)回复于 2005-03-12 13:50:47 得分 0
假设A类是B的父类,当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中,称父类对象是子类对象的上转型对象。
多态性就是父类的某个方法被子类重写时,可是产生各自的行为功能。
采用多态,让程序具备了动态的扩充性。Top
3 楼kblmkblm(haha)回复于 2005-03-12 17:19:57 得分 0
请高手指点:
“当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中”
子类创建一个对象时难道会产生一个父类对象吗?例如:
Collection a = (Collection)new ArrayList();
a.***();
我的理解a仍然是ArrayList对象,只是在内存中a的前若干数据项和方法符合Collection类的标准。所以可以向上转型。
不知对不对,请指教。Top
4 楼tantj(Focus on....)回复于 2005-03-12 17:37:30 得分 0
我也对这个不是很清楚,关注中Top
5 楼neujyj(一路走来)回复于 2005-03-12 18:48:05 得分 0
很简单,向上转型会缩小子类对外方法,
这样可以接收更多的继承基类的子类,所以不同的子类可以接收同样的引用
就象这样
方法 打(XX){ },基中XX代表一基类
子类 人和水都继承XX
调用打(new 人()),打(new 水()),很显然行为是不一样的,但它可以正常的执行
其本质是通过基类的方法接口来调用子类在内存中产生的代码段Top
6 楼neujyj(一路走来)回复于 2005-03-12 18:55:55 得分 10
“当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中”
子类创建一个对象时难道会产生一个父类对象吗?例如:
Collection a = (Collection)new ArrayList();
a.***();
答:
在这里a只是内存中一个受到限制的引用(它只能调用Collection及Collection继承类的方法),
a实际调用的是在内存中产生的ArrayList对象的代码,
所以ArrayList继承Connection中一定要包含Connection中的方法,
否则a会去调用Connection中方法Top




