`
yatou_0209
  • 浏览: 36551 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

白话文讲多态

    博客分类:
  • java
阅读更多
对于多态的理解一直都仅限于那三句话:
1.父类的引用,引用子类型的实例
2.子类型里面重写父类型的方法
3.父类型的引用调用子类型的重写后的方法
但是其什么意思一直都是懵懵懂懂。也许比较厉害的人,一看就知道什么意思。呵呵,没办法,我就是比较笨,看不懂,所以,今天用通俗易懂的白话文,来补充一下多态。(稍微比较厉害的人,可以飘过了。

多态中,虽然走的是子类中的方法,但是可用的只有从父类中继承的方法。
     如果,子类中的方法,在父类中没有,那么在判断输出结果时,此方法不存在。
     父类中有这个方法,子类中重写了此方法,那么输出结果以子类中的为准。
     父类中有这个方法,子类中没有重写此方法,那么输出结果以父类中的为准。
若:
  class A extends B{}
  B b = new A();
  那么A中新增的方法将不会运行,只会走A中重写B类的方法,和B类中的方法。如果B继承了C的类,那么还会走C中B没有实现的方法。

这是我通过一个例子,理解出来的,如果有不对的地方,还请见谅,或者,帮我指正也好。
分享到:
评论
10 楼 yatou_0209 2011-12-21  
BuN_Ny 写道
你想太多了。多态更多的是思想层面的东西,继承是实现层面的东西,封装则是基础层面的东西。三者都是描述面向对象的,没有那么大的区分。
多态的目的主要是忽略对象之间的差异,实现依赖倒转。上层方法一般是一种承诺,下层方法才是实现。

啊~~~~~哦。了解了,谢谢。。。嘿嘿
9 楼 yatou_0209 2011-12-21  
BuN_Ny 写道
你想太多了。多态更多的是思想层面的东西,继承是实现层面的东西,封装则是基础层面的东西。三者都是描述面向对象的,没有那么大的区分。
多态的目的主要是忽略对象之间的差异,实现依赖倒转。上层方法一般是一种承诺,下层方法才是实现。

我只是一直搞不清楚,所以才写了这篇文章,省的以后会忘,我说的不见得是对的,只是我自己的理解罢了。。有不对的地方谢谢指教。。
8 楼 BuN_Ny 2011-12-20  
父类中有这个方法,子类中没有重写此方法,那么输出结果以父类中的为准。
高手一直都睡床,你没有任何异议,今天你当班,睡的是床还是吊绳?
7 楼 BuN_Ny 2011-12-20  
父类中有这个方法,子类中重写了此方法,那么输出结果以子类中的为准。
高手一直都吃白菜,你非要吃萝卜,请问,今天你当班,被吃掉的是萝卜还是白菜?
6 楼 BuN_Ny 2011-12-20  
如果,子类中的方法,在父类中没有,那么在判断输出结果时,此方法不存在。
有一个高手,他只会吃饭、睡觉,但是今天他不在,你来代替他,而你至少要会吃饭、睡觉才能算高手吧?有趣的是,你还会打豆豆,那么那个高手会打豆豆么?
5 楼 BuN_Ny 2011-12-20  
你想太多了。多态更多的是思想层面的东西,继承是实现层面的东西,封装则是基础层面的东西。三者都是描述面向对象的,没有那么大的区分。
多态的目的主要是忽略对象之间的差异,实现依赖倒转。上层方法一般是一种承诺,下层方法才是实现。
4 楼 yatou_0209 2011-12-15  
long2010 写道
引用
若:
  class A extends B{}
  B b = new A();
  那么A中新增的方法将不会运行,只会走A中重写B类的方法,和B类中的方法。如果B继承了C的类,那么还会走C中B没有实现的方法。

说明一下,如果B继承了C类,那么C类中声明的非私有方法即使B类中没有重写,B类中也是可以使用的。不能说B中没有实现这个方法,只能说没有重写这个方法而已。需要注意的一点:必须是非私有的方法。


了解。。受教了。。。
3 楼 long2010 2011-12-15  
引用
若:
  class A extends B{}
  B b = new A();
  那么A中新增的方法将不会运行,只会走A中重写B类的方法,和B类中的方法。如果B继承了C的类,那么还会走C中B没有实现的方法。

说明一下,如果B继承了C类,那么C类中声明的非私有方法即使B类中没有重写,B类中也是可以使用的。不能说B中没有实现这个方法,只能说没有重写这个方法而已。需要注意的一点:必须是非私有的方法。
2 楼 yatou_0209 2011-11-22  
败家叔叔。。。
1 楼 gerrard_ok 2011-11-21  
漂你妹啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

相关推荐

Global site tag (gtag.js) - Google Analytics