A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿斌 中级黑马   /  2014-8-5 16:50  /  1105 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿斌 于 2014-8-6 10:52 编辑

在学习类和对象的时候有一点疑问,分享出来希望可以得到解:
Father a = new Son(); 对于这句话,大家是怎么理解的?(ps:Father是父类,Son是子类)
其实这种用法规范点说就叫做“父类引用指向子类对象”,主要是我是想听听大家怎么用通俗易懂的语言来描述这句话的。

10 个回复

倒序浏览
为了实现多态。。个人理解
回复 使用道具 举报
里氏替换原则:
1、子类对象可以赋值给父类变量:Father father = new Son();
2、父类变量指向子类对象时才可以强制转换为子类:Father father = new Son();  Son son=(Son)father;

通俗一点,son 继承自 father ,那么 father 有的,son 应该都继承到了。比如 Animal animal=new Dog(); Dog继承自Animal。狗也是动物,对吧
回复 使用道具 举报
这行代码运用到了里氏转换中的一个特点:一个子类可以给其父类赋值,换句换说就是,当我们需要一个父类对象时,我们可以给一个子类对象给它.
举个例子:string.Join( )方法,其要求用户给的第二个参数类型是object类型,而所有的类型都是直接或间接继承至object类的,所以我们可以输入任意类型的参数
回复 使用道具 举报
可以把它理解成一个从右向左的赋值,人类=中国人;就像这样赋值,把一个中国人赋值给人类当中是可以的,但是不可以:中国人=人类;不可以把人类赋值给中国人,因为人类中还包括其他国家的人
回复 使用道具 举报
u010209195 发表于 2014-8-5 16:55
为了实现多态。。个人理解

嗯,实现多态,这是目的,我明白。那Father a = new Son(); 这条语句的执行过程应该怎么理解呢?
回复 使用道具 举报
_xixi_ 发表于 2014-8-5 17:05
里氏替换原则:
1、子类对象可以赋值给父类变量:Father father = new Son();
2、父类变量指向子类对象时 ...

也就是说Father a = new Son(); 其实就是一条赋值语句,那这语句的执行过程是怎样的?
回复 使用道具 举报
Son 继承自 father ,那么 father 有的属性和方法,son 应该都继承到了。
回复 使用道具 举报
好像有点明白了.....
回复 使用道具 举报
阿斌 发表于 2014-8-6 10:26
也就是说Father a = new Son(); 其实就是一条赋值语句,那这语句的执行过程是怎样的? ...

创建Son对象,先调用子类构造函数,再调用父类构造函数,执行父类构造函数,再执行子类构造函数,最后把该对象的引用地址赋值给父类变量
回复 使用道具 举报
_xixi_ 发表于 2014-8-6 10:41
创建Son对象,先调用子类构造函数,再调用父类构造函数,执行父类构造函数,再执行子类构造函数,最后把 ...

嗯嗯,现在明白了:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马