charlie-captain
2016-04-19 17:35
采纳率: 100%
浏览 2.1k
已采纳

java向下转型和直接引用子类对象的区别

class A{
}
class B extends A {
}
向下转型:
A a = new B();
B b = (B)a;
直接调用子类:

B b = new B();
这两个 b 实例 有什么区别

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • fubo1990 2016-04-19 23:42
    已采纳

    实现的功能没有区别。但是维护起来就不如第一个。
    第一个是父类引用指向之类对象。可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的。让你更关注父类能做什么,而不去关心子类是具体怎么做的,你可以随时替换一个子类,也就是随时替换一个具体实现,而不用修改其他.

    点赞 评论
  • blownewbee 2016-04-19 18:17

    完全没有区别。

    点赞 评论
  • lambda-fk 2016-04-20 02:11

    使用上是没有区别的。

    只是涉及到设计上的一些问题而已。

    第一点:
    传统的面向对象编程是一个纵向的继承的过程。
    所以= 左边的都是父类对象,右边是子类的。可以达到多态效果。

    第二点:
    程序中往往传入的参数需要进行具体类型的重塑
    比如泛型模板 List往往传入具体的类的时候需要进行这个 instanceof 判断之后再进行转型
    或者是反射的时候生成的对象需要进行这个转型

    其他的情况是不需要进行这种转型的。

    点赞 评论

相关推荐 更多相似问题