我们都知道继承可以实现代码的重用,如果一些方法在程序中经常被用到,比如数据库操作的方法(后成A)。现有以下两种做法,你能说出哪个更合理些吗,
(一)、哪个类要用A,就直接继承A说在的类。(虽然不符合继承的is-a关系)
(二)、将A写成静态的
请你给出详细的说明!

解决方案 »

  1.   

    LZ所言的两种方法也是得根据软件中的具体情况而论的,先分析一下LZ的这两种情况吧
    1、继承的方式
    如果是继承的方式,这首先是LZ所言不符合继承的关系,虽然从程序功能角度讲实现了数据库操作并且代码得到复用。至少比原来代码没有复用时思路清晰了,但分析一看,有以下几个小问题:(1)、非面向对象思想;(2)、继承虽然能实现代码复用,但是增加了程序的耦合度;(3)JAVA中是单继承,可扩展性不高;(4)、继承关系混乱,业务逻辑不明确,不利于业务拓展。因此,LZ只是想复用一些数据库操作的方法,使用这种方法有点过了。
    2、静态的方式
    使用一个辅助工具类,把常用的函数用静态方法封装实现代码复用还是一种可行的方法,例如自己写一个简单的JDBC工具类,把一些获取数据库连接,结果集处理,资源释放等简单实现打造一个轻量级的辅助类。这样即没有继承关系,同时实现了代码复用,思路也较清晰,对于LZ的需求还是挺合适。具体的情况还得看程序的复杂程度及架构设计思路,比如在Web应用中,目前的主流是分层实现,在大型的应用中数据库后台与前台页面之间交互的效率是整个系统的核心,这种情况要充分考虑各种情况,实现系统优化处理。还是具体情况具体分析,没有通用的万能公式。个人拙见。
      

  2.   

    (二)合理一些。原因如下:
    1. java不支持多重继承,如果你继承了一个不合适的类,你就没有办法再继承其它的类了,即使继承其它的类更合适你也没有办法了。这样就把代码钉死在一个不合理的结构中。
    2.如果不是is-a关系而用了继承,你除了重用了A方法,还继承了其它一些对你来说无用的属性和方法,而且还有可能带来名字的冲突,就像人体中的盲肠一样,在某种场合下可能是致命的。
    3.程序的可读性非常差。谁能理解你继承一个八杆子也打不到类的意图呢?
      

  3.   

    我觉得应该采取第二种方式合适。
    理由:
    1.如果是继承的话就会因为为了实现连接而没有办法继承更多的能够实现其他功能的类了,而连接还可以用其他的方式去实现,这样就就好像有点点丢了西瓜捡了芝麻!
    2.讲连接字符等等封装在一个类中,在要用的时候在调用,这样也可以达到代码重用的功效!而且本身类也可以更好的继承其他类实现更多的功能!
    3.继承不满足is-a的关系虽然说在语法上没有问题,但是毕竟那样造成了混乱,代码的可读性不佳!
    本人拙见!