首页 新闻 会员 周边

很简单的子类父类问题

0
悬赏园豆:40 [已解决问题] 解决于 2015-04-15 17:28

都说 Father son = new Son();这种样式符合里式替换原则,但是我如果想使用Son类里面独有的数据,难道就只能 Son son = new Son();吗?这样就不能保证里式替换吗?

代码小兵的成长的主页 代码小兵的成长 | 菜鸟二级 | 园豆:303
提问于:2015-04-15 09:41
< >
分享
最佳答案
0

里式替换原则 说的是一种继承的方式,继承又可以实现多态,多态可以实现 扩展。即该原则实现  扩展开发原则。

里式替换原则 注意点:

1. 子类不能随便重写 父类非虚方法,如 用 new 或者新建同名方法,这是不提倡的

2.父类方法有意让子类方法重写,须生命为虚方法或者抽象方法

 

原则到达的效果是:

Father father = new Son();

Son son = new Son();

father.test();

son.test();   //执行结果一样。

 

收获园豆:20
Qlin | 老鸟四级 |园豆:2403 | 2015-04-15 11:26

执行结果非要一样吗,如果我Son重写了Father的方法,签名就算一样,但是结果不一定一样啊。

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-04-15 11:38
其他回答(3)
0

里式替换原则只是说Father son = new Son()这样定义的父子类满足这个原则

跟Son son = new Son();这句话没有任何关系把,只要能实例化的类这句话基本都能执行的吧?

收获园豆:5
茂茂 | 园豆:2892 (老鸟四级) | 2015-04-15 09:46

Son类独有的东东出现的地方,Father根本出现不了,当然也就没有里式替换什么事了。以前是我自己理解歪了。多谢大神了

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-04-15 10:49
0

任何基类(Father)可以出现的地方,子类(Son)一定可以出现 —— 好好理解下这句话。

Son 可以继承 Father 吗?

收获园豆:10
Launcher | 园豆:45045 (高人七级) | 2015-04-15 10:10

Son当然可以继承Father了,因为Father可以实现的东西,用Son一定也可以,最多就是实现效果不一样。但是Son类独有的东东出现的地方,Father根本出现不了,当然也就没有里式替换什么事了。以前是我自己理解歪了。多谢大神了

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-04-15 10:49
0

共性的东西可以定义在基类里,特性的东西只能使用子类来处理了。

一个可行的方案是使用接口来识别某些特别的特性。

收获园豆:5
519740105 | 园豆:5810 (大侠五级) | 2015-04-15 10:54

就是面向接口编程是吗,这个我最近自己写点小例子,有点感悟

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-04-15 10:55

@代码小兵的成长: 谈不上面向接口还是OOP。

毕竟,在C++里,接口也是一个类。

Father和Son,你要:

Father son = new Son()

后使用Son的特性,这个是不可能的。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-15 11:12

@519740105: 多谢大神

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-04-15 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册