日期:2014-05-20  浏览次数:20609 次

Java多态的问题
本帖最后由 yinan9 于 2013-09-26 14:27:54 编辑
比如有两个类A,B。A是抽象类或者接口
B继承了,或实现了A
经常看到这样声明对象
A a=new B();

另一种方式
B b=new B();

这两种方式声明得到的对象a,b有什么不同呢?
在什么情况下要这样声明呢?

------解决方案--------------------
这是最基本了吧
A a=new B();
用父类声明 得到的对象,只考虑调用父类的方法和属性。
更多的时候,是因为通用性,易重构构,易维护。
比如: A 有 公共方法 getN(),B继承或实现了A,那么b也有,C也继承或实现了A,A c = new C();c也有getN()方法,但是方法实现不同,这时,想要换成调用c的实现。只要把new B(),给 new C();就好了,其他不用动,如果采用spring ,只需要修改注入就好了,如果是采用B b=new B();这种你想想,会怎么样?
另一种方式
B b=new B();如果 b还有其他方法,比如getX(),getY(),这两个不是父类的,如果A a=new B(); 则a对象无法调用getX(),getY();除非强转。