A a=new B()的意义

引用kevin的文章http://blog.sina.com.cn/s/blog_56146dc50100buv0.html

前提:A是B的父类。


A a = new B();

这一句的过程是这样的,
1)创建一个类A的引用a
2)创建一个类B的实例
3)把类B的引用赋值给a

因为A是B的父类,所以,赋值成功。

过程:

当消息发送到子类并要求以确定的参数调用其中一个方法时:

消息的处理如下沿着类链自下而上逐级查找,直到找到符合消息所要求的方法为止。

子类检查是否有同名且参数完全对应(参数的个数、类型、排列顺序均要相同)的方法,

若有,

就调用它,

若没有,

它的父类就响应这个消息的处理,

查找同名及同参数个数、类型、顺序的方法,

若有,

就调用这个方法。

如果查找到最上层仍未找到就会产生"编译出错"。

子类中若有与其祖先类同名的并具有相同参数表的方法时,

                             则具有屏蔽或隐藏其祖先类同名方法的功能。

利用多态允许将一个对象声明为某个父类,

而以扩展类实例化它(因为每一个子类都属于其超类的范围,从继承链的层次结构看,属于拓宽转换)。

多态机制可以方便对象的管理。JVM可以根据实例的类型动态地调用实现相应的方法。

 

设计模式比较难理解,初学java也不用考虑那么复杂,   
    
    如A有两方法     m1  m2   
    B重载了其中一个m2   
    
    那么a.m1()     执行A.m1,     a.m2()执行B.m2()   
    我觉得这是最实际的解释   

posted @ 2016-04-20 14:41  静静学吧  阅读(276)  评论(0编辑  收藏  举报