抽象类与接口的区别

面试的时候经常遇到接口与抽象类的区别,接口与抽象类的不同使用场景等问题,本文今天就讨论这些问题。

1.我对抽象类和接口的理解
接口与抽象类的不同的典型回答如下:

  • 接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离。
  • 抽象类主要用于代码重用。

当然以上是久经沙场考验的答案, 如果是面试中可以这么回答,但是对于抽象类和接口的区别我还想从另一个方面来谈谈它们的差异,从对事物的抽象层级上来说,接口更加彻底。对于行为的抽象使用抽象类也可以完成相同的功能。那还需要接口干嘛呢?在很多实际的场景下,抽象行为是不能给出任何具体的实现,只能有一个规范,举例来说动物的吃这个行为我们就只能给一个规范,因为各种各样的动物吃的行为都是不一样的。这种场景下我们就需要使用接口。而抽象类中的普通方法可以有自己的实现,所以它的抽象层级较接口要低一些。

2.接口与抽象类的语法区别

参数抽象类接口
默认的方法实现可以有默认的方法实现,由于抽象类中可以有非抽象方法,因此在非抽象方法中可以有默认的实现接口完全是抽象的。不能有方法的实现
实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有抽象方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器抽象类可以有构造器接口不能有构造器
实例化不能被实例化不能呗实例化
访问修饰符抽象方法可以有public、protected和default这些修饰符接口方法默认修饰符是public
静态方法抽象类可以有静态方法和静态代码块接口不能有静态方法和静态代码块
静态属性抽象类的静态属性可以自由定义接口的静态属性默认是public static final
成员变量抽象类可以有成员变量接口没有成员变量
main方法抽象方法可以有main方法并且可以运行没有main方法
多继承只能单继承支持一个类实现多个接口
速度它比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。

3.接口和抽象类的使用场景

  • 如果希望某些方法有默认的实现,就可以使用抽象类
  • 由于Java不支持多继承,但是实际的需求又需要多继承,那么需要使用接口。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值