Java多态的问题

yinan9 2013-09-26 02:25:44
比如有两个类A,B。A是抽象类或者接口
B继承了,或实现了A
经常看到这样声明对象
A a=new B();

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

这两种方式声明得到的对象a,b有什么不同呢?
在什么情况下要这样声明呢?
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guan_tu 2013-09-26
  • 打赏
  • 举报
回复
引用 4 楼 ZuxiangHuang 的回复:
这是最基本了吧 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();除非强转。
+1
末日哥 2013-09-26
  • 打赏
  • 举报
回复
看书吧,或者找篇blog看看
zuxianghuang 2013-09-26
  • 打赏
  • 举报
回复
这是最基本了吧 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();除非强转。
yinan9 2013-09-26
  • 打赏
  • 举报
回复
引用 2 楼 fudongrifdr 的回复:
多态无处不在,慢慢你就会明白的
拜托,求赐教
末日哥 2013-09-26
  • 打赏
  • 举报
回复
多态无处不在,慢慢你就会明白的
yinan9 2013-09-26
  • 打赏
  • 举报
回复
自己顶一下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧