黑马程序员技术交流社区

标题: 关于类与对象的疑问 [打印本页]

作者: 阿斌    时间: 2014-8-5 16:50
标题: 关于类与对象的疑问
本帖最后由 阿斌 于 2014-8-6 10:52 编辑

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

作者: u010209195    时间: 2014-8-5 16:55
为了实现多态。。个人理解
作者: _xixi_    时间: 2014-8-5 17:05
里氏替换原则:
1、子类对象可以赋值给父类变量:Father father = new Son();
2、父类变量指向子类对象时才可以强制转换为子类:Father father = new Son();  Son son=(Son)father;

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

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

也就是说Father a = new Son(); 其实就是一条赋值语句,那这语句的执行过程是怎样的?
作者: 小笨    时间: 2014-8-6 10:29
Son 继承自 father ,那么 father 有的属性和方法,son 应该都继承到了。
作者: 阿斌    时间: 2014-8-6 10:29
好像有点明白了.....
作者: _xixi_    时间: 2014-8-6 10:41
阿斌 发表于 2014-8-6 10:26
也就是说Father a = new Son(); 其实就是一条赋值语句,那这语句的执行过程是怎样的? ...

创建Son对象,先调用子类构造函数,再调用父类构造函数,执行父类构造函数,再执行子类构造函数,最后把该对象的引用地址赋值给父类变量
作者: 阿斌    时间: 2014-8-6 10:51
_xixi_ 发表于 2014-8-6 10:41
创建Son对象,先调用子类构造函数,再调用父类构造函数,执行父类构造函数,再执行子类构造函数,最后把 ...

嗯嗯,现在明白了:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2