2 williamchew williamchew 于 2016.04.20 01:35 提问

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

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

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

3个回答

fubo1990
fubo1990   2016.04.20 07:42
已采纳

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

caozhy
caozhy   Ds   Rxr 2016.04.20 02:17

完全没有区别。

fk002008
fk002008   2016.04.20 10:11

使用上是没有区别的。

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!