学妹学java,今天跑过来问我:抽象类与接口的区别???

昨天被学妹问住了这个问题,只能说出个大概,而说不清具体。让我看清了自己有多low,赶紧研究记录下。

从语法层面来讲:

  • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract(默认) 方法

  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final(默认)类型的

  • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法

  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

从设计层面上来讲:

  • 抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
    比如狗和车子,它们的共性就是跑路,设计它们一个是Dog类,一个是Car类
    它们完全不是同一个类的(属性),但是现在它们有一个共性的行为-----跑路
    这时候设计一个Run接口,Dog类和Car类就可以根据需求来实现这个Run的接口
    狗和车子就都能跑了,狗吐槽为啥要拿它和车子比,它能跑得过五菱宏光吗?
    现在又有一个抽象People类,也可以按需来实现Run接口,你问我:ZhangShang这个类能不能跑路?你直接继承People类就行了。

  • 抽象类的继承关系,它是很多子类的父类,父子之间是 是不是的关系,就比如小王到底是不是老王的儿子,老王到底有几个儿子?
    抽象类它是一种模板式设计,老王偷偷生了小明,小美,小吕,邻居们都说他们仨长的跟老王一样的,所以,他们仨的脸就是父类的公共部分,老王的脸就是一种模板

  • 接口是一种行为规范,它的实现者可以五花八门,是动物类,是植物类,是神仙类。接口与实现类之间是有没有,能不能的关系,就拿上面例子来说,狗能不能跑路?车子能不能跑路?人类有没有跑路这种行为?
    接口它是一种辐射式设计,拿 lol 当一个接口,接口有wegame启动和客户端启动方式,以前打lol是可以直接启动客户端,但是现在腾讯删除接口中的客户端启动方式,导致现在所有下载了(实现接口)lol的电脑,都必须下载一个Wegame才能启动游戏。结论:如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动,这个接口下的类都会被接口辐射扩散影响。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值