您的位置:首页 > 编程语言 > Java开发

向上转型:动态绑定--[Java]

2009-12-21 21:18 459 查看
查了些网上的资料,发现如果子类向上转型为父类,则会遗失掉父类中没有定义的方法,而除了private的属性外,其他的属性都会被父类的属性覆盖。

<父类引用指向子类对象>

<new对象的内存情况:①:为所有的成员变量分配内存空间并自动初始化为默认值

②: 显式初始化;③:调用构造方法;④:对象的引用赋值给变量>

<子类对象在构建的时候,先构建了一个父类对象(copy?)所有的成员变量和方法;

然后重写成员变量和成员方法;只是覆盖而不是delete;父类成员还在>

<子类引用子类中被隐藏的父类成员?强制转换成父类,将视窗转向父类内容>



例如如下程序中,son是一个Father类型的,指向Son类型的对象的引用。所以,调用printTest时,打印的都是子类Son的属性(调用的Son的printTest()方法)。

而当用System.out.println(Son.var2)这样的形式输出时,除了Son的私有属性外,输出的都是Father类的属性值。

而且当调用son.printTest2()时,则出现错误,无法编译。

Father son = new
Son();就是一个向上转型。一开始无法理解为什么System.out.println(Son.var2)输出的是父类Father的属性值,son毕竟是指向一个Son类型的对象啊。下面是我后来的一种想法,比较通俗,如有谬误,请高手指正:

当一个儿子长大成人娶妻生子之后,他便“向上转型”为一个父亲了,呵呵,他除了非常私有的(private)一些情况保持不变外,如姓名,老婆的名
字等等外,其他的属性(public,protected,friendly)都成为一个标准的父亲应有的属性(被覆盖了),如对家庭的责任感,由做儿子
时的“低”变为了父亲应有的“高”;自由的程度,由作儿子时的“高”变为了作父亲后的“低”等等类似的。而他作儿子时一些特有的(不属于父亲应有的或者说
父类没有的)作为(方法)在其成为父亲后便被舍弃了,如恣意妄为,夜不归宿等等。而正常的行为,比如挣钱的方法,每个父亲肯定不尽相同,作son时的方法
也就保存了下来(覆盖了父类的方法)。

Fat

her类



Son类



TestUpcasting类



如果在TestUpcasting中没有son.printTest2();这句,则程序编译通过并运行,结果为



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: