为什么不要继承一个实现好的类,而要继承抽象类或接口?
听说是防止向下转型判断造成的程序复用性丢失,但是使用了接口就能防止向下转型问题吗?
好像这个和向下转型没什么关系吧.

解决方案 »

  1.   

    1.为什么不要继承一个实现好的类,而要继承抽象类或接口?
    这个涉及到设计原则,可以看看依赖倒置原则(dependence inversion principle, DIP),依赖于抽象而不依赖于具体细节。
    顺带看看接口隔离原则吧
    http://blog.sina.com.cn/s/blog_4ab057eb0100im0u.html
    2.听说是防止向下转型判断造成的程序复用性丢失,但是使用了接口就能防止向下转型问题吗?
    好像这个和向下转型没什么关系吧.
    向上转型是安全的,向下转型却存在问题,若是父类指向的实例不是向下转型的目标类型,将导致错误发生。使用接口可以在一定程度上改善这种情况,貌似关系并不是很大
      

  2.   


    没那么复杂, 完全可以继承一个实现好的类,只是判断上不太方便。例如 基类 人 , 实现了一个子类 男人。
    如果你要做一个 女人的子类, 可以继承男人,也可以继承人。
    但是如果你继承了男人。  当判断 当前类是否是男人时(instanceof), 由于女人类是男人的子类,会导致判断错误。而如果你要做一个老男人类,当然应该继承男人类了。