关于java适配器设计模式中的一点疑惑? 60

如题,有点疑惑的是就是中间的那个适配器类好像不需要定义成抽象类,这个类全部实现了上一层接口的方法,只是方法体为空而已,求解... 如题,有点疑惑的是就是中间的那个适配器类好像不需要定义成抽象类,这个类全部实现了上一层接口的方法,只是方法体为空而已,求解 展开
 我来答
雪色精魂
2015-01-24 · TA获得超过181个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:159万
展开全部
刚学java不久,说说个人的理解吧:
适配器类的设计主要是为了避免不必要的代码书写,更加简洁。
比如,为WindowListener接口设计了WindowAdapter,为MouseListener设计了MouseAdapter。
以前,若要添加一个窗口事件,必须实现WindowListener接口的全部7个方法,而实际上你只关心其中一个方法的内容,这样代码显得臃肿。而当通过WidowAdapter的匿名内部类(窗口事件和鼠标事件多通过匿名内部类),只需要覆盖其中你关心的方法就可以了(其他的方法已经实现了),从而代码显得简洁。
适配器定义成抽象类是有原因的,大概可以这么理解:
抽象类的特点是不可以通过new关键字直接实例化,有些可以通过类所提供的静态方法获取本类实例,比如Calendar.getInstance(),DateFormat.getInstance()等(实际获取的是子类的实例)。对于适配器而言,因为是空实现(所有的方法体内容为空),也就是并没有达到监听的效果。如果没有定义成抽象的,就可以直接new出一个实例,而万一你没有覆盖其中的方法(总有不小心的时候),那是不是会和你本来的意愿有所差别呢?所以,java的设计者希望你必须覆盖其中你所关心的方法来达到你要的效果,从而减少不必要的错误。
希望能对你有所帮助吧!
Best Wishes!
追问
谢谢你的回答,隔了这么久才看到,不好意思
是这样的,我理解了下,你看你是不是这个意思。
假如现在有一个接口,里面有6个方法。
然后因为某些原因,我要把这些方法分类,分成三类,
用抽象类a、b、c,分别继承2种方法,此时a、b、c就是适配器类了,
而我之前不明白为什么要将适配器类定义成抽象的原因就在这了,
因为适配器类从接口继承方法是不一定要全部继承,而没有全部继承就
只能是抽象类了。
你是这个意思吗?
追答

还有点小问题吧。

  1. “用抽象类a、b、c,分别继承2种方法”这个说法不太对,类与接口的关系是实现(implements)关系。一个类实现一个接口必须实现其全部方法,否则这个类也是抽象的。

  2. 有一种情况:一个类实现了某个接口的全部(抽象)方法,但是只是空实现(方法体为空),这个类可以不用abstract来修饰,这样一来,这个类就不是抽象类了,你可以直接new对象,但是由于这个类什么工作都没做(空实现),所以new对象并没有什么意思。所以同样把这个类变成抽象类,用abstract来修饰,意在提醒类使用者,必须去覆盖其中的某个方法才能新建对象。

说点额外的:不必执着于某个概念,可以先放下。随着学习的深入,知识量的增加,再遇到相关知识的时候可能有触类旁通的感觉。

Best wishes!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式