这个问题的背景是这样的:
我在代码中需要定义一个消息处理类,消息处理类有如下功能:
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个函数都扔到接口去声明如何?
问题:所有方法都在接口里面声明,会怎么样?这样写为什么不恰当?
最本质的问题?什么是接口?什么是抽象类?两者的区别在何处?