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()
我觉得这是最实际的解释