向上转型:动态绑定--[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();这句,则程序编译通过并运行,结果为
<父类引用指向子类对象>
<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();这句,则程序编译通过并运行,结果为
相关文章推荐
- Java动态(后期)绑定和overloading 向上转型
- Java 基础(8)—— 向上转型、向下转型、动态绑定、静态绑定
- Java动态(后期)绑定和overloading 向上转型
- Java方法的静态绑定与动态绑定讲解(向上转型的运行机制详解)
- Java动态(后期)绑定和overloading 向上转型
- Java动态(后期)绑定和overloading 向上转型
- Java动态(后期)绑定和overloading 向上转型
- Java动态(后期)绑定和overloading 向上转型
- Java面向对象8——对象转型,动态绑定,抽象类,final关键字及接口
- Java向上转型的思考(运行时绑定)
- Java上转型、隐藏、覆盖与动态绑定
- Java运行时绑定探讨之向上转型
- java动态绑定与转型
- Java学习之面向对象(1.Object类,(1)toString方法,(2)equals方法,2.对象转型(casting),3.动态绑定与多态,4.抽象类(abstract),5.Final关键字)
- Java的动态绑定
- java入门(向上转型和向下转型)
- 【Java】多态和动态绑定中的坑
- Java向上转型与向下转型
- Java学习笔记-向上转型,向下转型
- Java之动态绑定