• 关于抽象类和接口设计层面的问题,求答疑!


    这个问题的背景是这样的:

    我在代码中需要定义一个消息处理类,消息处理类有如下功能:

    getContent();   //得到消息内容

    getSender();    //得到发送人

    getType();  //得到消息类型

    send();    //执行发送

    check();    //验证消息的合法性

    我最后反复修改,设计后的结果如下:(之后贴代码)

    IMessageHandler:

    {

      getContent();

      getSender();

      getType();

    }

    AbstractMessageHandler implenments IMessageHandler:

    {

      abstract send();

      abstract check();  

      getContent(){};

      getSender(){};

      getType(){};

    }

    问题是:这样分配方法的声明恰当嘛?把三个getXXX放在接口中声明,然后再抽象类中在实现getXXX同时也声明另外两个抽象函数。

    假如我认为这样设计是正确的,这样写带来的便捷有哪些,体现了什么编程思想?

    可以先考虑下面极端的情况:

    我之后做过这样的处理,得!我不要接口了,反正在抽象类中还要实现一次,我五个都在抽象类中声明,只是getXXX我直接写成一个

    共有的函数。

    之后问题来了,我代码中有如下需求。

    <T extends AbstractMessageHandler>

    有一个泛型类需要去extends ,但是泛型一般继承的都是接口(看baidu内部代码的出来的结论),那我这个没接口怎么办?

    问题:为啥泛型要去extends 接口?就不能extends 抽象类嘛?难道要特意建一个接口去满足业内这种写法?

    之后我有把接口加上去了,就放了刚刚的三个getXXX,然后我代码能跑通了,我又很极端的思考,我把5个函数都扔到接口去声明如何?

    问题:所有方法都在接口里面声明,会怎么样?这样写为什么不恰当?

    最本质的问题?什么是接口?什么是抽象类?两者的区别在何处?

  • 相关阅读:
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays(topK-logk)
    apache开源项目--Derby
    apache开源项目--Apache Drill
    apache开源项目-- OODT
    apache开源项目--Mavibot
    apache开源项目--ApacheDS
    apache开源项目--TIKA
    apache开源项目--Mahout
    apache开源项目--Jackrabbit
  • 原文地址:https://www.cnblogs.com/hexie/p/4899412.html
Copyright © 2020-2023  润新知