如何区分Java中抽象类和接口?

 我来答
北大青鸟志远科技
2023-04-03 · 用心创作内容,感谢您的关注。
北大青鸟志远科技
向TA提问
展开全部

理解抽象类



abstractclass和interface在Java语言中都是用来进行抽象类,所有的成员方法都是abstract的。从某种意义上说,interface是一种非凡形式的abstractclass。


从编程的角度来看,abstractclass和interface都可以用来实现“designbycontract”的思想。但是在具体的使用上面还是有一些区别的。


首先,abstractclass在Java语言中表示的是一种继续关系,一个类只能使用一次继续关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继续的支持方面的一种折中考虑吧。


其次,在abstractclass的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。


在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为假如后来想修改类的界面(一般通过abstractclass或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是假如界面是通过abstractclass来实现的,那么可能就只需要修改定义在abstractclass中的默认行为就可以了。


同样,假如不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了“onerule,oneplace”原则,造成代码重复,同样不利于以后的维护。因此,在abstractclass和interface间进行选择时要非常的小心。


从设计理念层面看abstractclass和interface


上面主要从语法定义和编程的角度论述了abstractclass和interface的区别,这些层面的区别是比较低层次的、非本质的。回龙观电脑培训认为本小节将从另一个层面:abstractclass和interface所反映出的设计理念,来分析一下二者的区别。认为,从这个层面进行分析才能理解二者概念的本质所在。


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式